diff --git a/src/main/java/org/olat/course/assessment/bulk/BulkAssessment_2_DatasStep.java b/src/main/java/org/olat/course/assessment/bulk/BulkAssessment_2_DatasStep.java
index 7f6a36ad7d3b5fd49d167cb1583f3f9e222b8139..c638a3142dafdfea4ec46279f0b78b7ada80333f 100644
--- a/src/main/java/org/olat/course/assessment/bulk/BulkAssessment_2_DatasStep.java
+++ b/src/main/java/org/olat/course/assessment/bulk/BulkAssessment_2_DatasStep.java
@@ -70,7 +70,7 @@ public class BulkAssessment_2_DatasStep extends BasicStep {
 			setNextStep(new BulkAssessment_2b_ChooseColumnsStep(ureq, savedDatas.getColumnsSettings()));
 		}
 		
-		hasPreviousStep = (courseNode == null ? false : true);
+		hasPreviousStep = courseNode != null;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java b/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java
index 3bf290078db91779765bc2d520aeca7b8805f4e3..cd6dd63c9752b7c17215e49d523a3591d6e9f6c5 100644
--- a/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java
+++ b/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java
@@ -21,7 +21,6 @@ package org.olat.course.assessment.bulk;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -62,6 +61,8 @@ import org.olat.course.assessment.model.BulkAssessmentDatas;
 import org.olat.course.assessment.model.BulkAssessmentRow;
 import org.olat.course.assessment.model.BulkAssessmentSettings;
 import org.olat.course.nodes.AssessableCourseNode;
+import org.olat.course.nodes.GTACourseNode;
+import org.olat.modules.assessment.model.AssessmentEntryStatus;
 
 /**
  *
@@ -71,11 +72,17 @@ import org.olat.course.nodes.AssessableCourseNode;
  */
 public class DataStepForm extends StepFormBasicController {
 
-	private static final String[] keys = new String[] {"tab","comma"};
+	private static final String[] keys = new String[] { "tab", "comma" };
+	private static final String[] statusKeys = new String[] { AssessmentEntryStatus.done.name(), AssessmentEntryStatus.inReview.name(), "not" };
+	private static final String[] visibilityKeys = new String[] { "visible", "notvisible", "notchanged" };
+	private static final String[] submissionKeys = new String[] { "accept", "notchanged" };
 
 	private TextElement dataEl;
 	private FileElement returnFileEl;
 	private SingleSelection delimiter;
+	private SingleSelection statusEl;
+	private SingleSelection visibilityEl;
+	private SingleSelection acceptSubmissionEl;
 
 	private VFSLeaf targetArchive;
 	private BulkAssessmentDatas savedDatas;
@@ -130,13 +137,35 @@ public class DataStepForm extends StepFormBasicController {
 		String[] values = new String[] {translate("form.step3.delimiter.tab"),translate("form.step3.delimiter.comma")};
 		delimiter = uifactory.addRadiosVertical("delimiter", "form.step3.delimiter", formLayout, keys, values);
 		// preset delimiter type to first appearance of either tab or comma when data is available, default to tab for no data
-		int firstComma = dataVal.indexOf(",");
-		int firstTab = dataVal.indexOf("\t");
+		int firstComma = dataVal.indexOf(',');
+		int firstTab = dataVal.indexOf('\t');
 		if (firstComma > -1 && (firstTab == -1 || firstTab > firstComma )) {
 			delimiter.select("comma", true);
 		} else {
 			delimiter.select("tab", true);
 		}
+		
+		String[] statusValues = new String[] {
+				translate("form.step3.status.assessed"), translate("form.step3.status.review"),
+				translate("form.step3.status.dont.change")
+		};
+		statusEl = uifactory.addRadiosVertical("form.step3.status", "form.step3.status", formLayout, statusKeys, statusValues);
+		statusEl.select(statusKeys[statusKeys.length - 1], true);
+		String[] visibilityValues = new String[] {
+				translate("form.step3.visibility.visible"), translate("form.step3.visibility.notvisible"),
+				translate("form.step3.visibility.dont.change")
+		};
+		visibilityEl = uifactory.addRadiosVertical("form.step3.visibility", "form.step3.visibility", formLayout, visibilityKeys, visibilityValues);
+		visibilityEl.select(visibilityKeys[visibilityKeys.length - 1], true);
+		
+		if(courseNode instanceof GTACourseNode) {
+			String[] submissionValues = new String[] {
+				translate("form.step3.submission.accept"), translate("form.step3.submission.dont.change")
+			};
+			acceptSubmissionEl = uifactory.addRadiosVertical("form.step3.submission", "form.step3.submission", formLayout, submissionKeys, submissionValues);
+			acceptSubmissionEl.select(submissionKeys[submissionKeys.length - 1], true);
+			acceptSubmissionEl.setHelpTextKey("form.step3.submission.help", null);
+		}
 
 		// hide data input field in case the element does not have any score, passed or comment field enabled
 		if (onlyReturnFiles) {
@@ -177,6 +206,26 @@ public class DataStepForm extends StepFormBasicController {
 		if(datas == null) {
 			datas = new BulkAssessmentDatas();
 		}
+		
+		if(statusEl.isOneSelected()) {
+			String selectedStatus = statusEl.getSelectedKey();
+			if(AssessmentEntryStatus.isValueOf(selectedStatus)) {
+				datas.setStatus(AssessmentEntryStatus.valueOf(selectedStatus));
+			}
+		}
+		
+		if(visibilityEl.isOneSelected()) {
+			String selectedVisibility = visibilityEl.getSelectedKey();
+			if("visible".equals(selectedVisibility)) {
+				datas.setVisibility(Boolean.TRUE);
+			} else if("notvisible".equals(selectedVisibility)) {
+				datas.setVisibility(Boolean.FALSE);
+			}
+		}
+		
+		if(acceptSubmissionEl != null && acceptSubmissionEl.isOneSelected()) {
+			datas.setAcceptSubmission(acceptSubmissionEl.isSelected(0));
+		}
 
 		if(bulkAssessmentTmpDir == null) {
 			VFSContainer bulkAssessmentDir = VFSManager.olatRootContainer("/bulkassessment/", null);
@@ -264,20 +313,28 @@ public class DataStepForm extends StepFormBasicController {
 					}
 
 					targetArchive = tmpDir.createChildLeaf(uploadedFilename);
-					FileInputStream inStream = new FileInputStream(uploadedFile);
-					if(VFSManager.copyContent(inStream, targetArchive)) {
-						datas.setReturnFiles(targetArchive.getRelPath());
-						processReturnFiles(targetArchive, rows);
-					}
+					copyUploadFile(datas, uploadedFile, rows);
 				} else {
 					datas.setReturnFiles(targetArchive.getRelPath());
 					processReturnFiles(targetArchive, rows);
 				}
-			} catch (FileNotFoundException e) {
+			} catch (IOException e) {
 				logError("", e);
 			}
 		}
 	}
+	
+	private void copyUploadFile(BulkAssessmentDatas datas, File uploadedFile, List<BulkAssessmentRow> rows) throws IOException {
+		try(FileInputStream inStream = new FileInputStream(uploadedFile)) {
+			if(VFSManager.copyContent(inStream, targetArchive)) {
+				datas.setReturnFiles(targetArchive.getRelPath());
+				processReturnFiles(targetArchive, rows);
+			}
+		} catch(IOException e) {
+			logError("", e);
+			throw e;
+		}
+	}
 
 	private boolean isSame(VFSItem currentTarget, File uploadedFile) {
 		if(currentTarget instanceof LocalImpl) {
@@ -302,12 +359,11 @@ public class DataStepForm extends StepFormBasicController {
 		}
 
 		if(target.exists()) {
-			InputStream is = target.getInputStream();
 			File parentTarget = ((LocalImpl)target).getBasefile().getParentFile();
-			ZipInputStream zis = new ZipInputStream(is);
 
 			ZipEntry entry;
-			try {
+			try(InputStream is = target.getInputStream();
+					ZipInputStream zis = new ZipInputStream(is)) {
 				byte[] b = new byte[FileUtils.BSIZE];
 				while ((entry = zis.getNextEntry()) != null) {
 					if(!entry.isDirectory()) {
@@ -316,7 +372,7 @@ public class DataStepForm extends StepFormBasicController {
 						}
 
 						Path op = new File(parentTarget, entry.getName()).toPath();
-						if(!Files.isHidden(op) && !Files.isDirectory(op)) {
+						if(!Files.isHidden(op) && !op.toFile().isDirectory()) {
 							Path parentDir = op.getParent();
 							String assessedId = parentDir.getFileName().toString();
 							String filename = op.getFileName().toString();
@@ -340,9 +396,6 @@ public class DataStepForm extends StepFormBasicController {
 				}
 			} catch(Exception e) {
 				logError("", e);
-			} finally {
-				IOUtils.closeQuietly(is);
-				IOUtils.closeQuietly(zis);
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties
index bb6cc975939f92dfb16cb3c60edac4c715b9a142..e04b980c2af2639c535de9fe1eda61901c87b94a 100644
--- a/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_de.properties
@@ -83,11 +83,18 @@ form.step2.error=Es wurden keine Bewertungsdaten eingegeben.
 form.step3.delimiter=$org.olat.course.assessment\:form.step3.delimiter
 form.step3.delimiter.comma=$org.olat.course.assessment\:form.step3.delimiter.comma
 form.step3.delimiter.tab=$org.olat.course.assessment\:form.step3.delimiter.tab
-
-
-
-
-
+form.step3.status=Status
+form.step3.status.assessed=Status "$org.olat.modules.assessment.ui\:assessment.status.done" setzen
+form.step3.status.review=Status "$org.olat.modules.assessment.ui\:assessment.status.inReview" setzen
+form.step3.status.dont.change=Nicht \u00E4ndern
+form.step3.submission=Abgabe
+form.step3.submission.accept=Abgabe akzeptieren
+form.step3.submission.dont.change=Nicht \u00E4ndern
+form.step3.submission.help=Abgabe werden nur akzeptiert (wenn Option gewählt ist) wenn "Bestanden" oder Punkte gesetzt werden.
+form.step3.visibility=Resultate Sichtbarkeit
+form.step3.visibility.visible=Resultate auf sichtbar setzen
+form.step3.visibility.notvisible=Resultate auf nit sichtbar setzen
+form.step3.visibility.dont.change=Sichtbarkeit nicht \u00E4ndern
 new.bulk=Neue Massenbewertung starten
 passed.false=$org.olat.course.assessment\:passed.false
 passed.true=$org.olat.course.assessment\:passed.true
diff --git a/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_en.properties
index 9312f12ddb0ca3acefa60db3c4f06712364ccfec..6543b4028a5fef882c543db7418562ec593ea33d 100644
--- a/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/assessment/bulk/_i18n/LocalStrings_en.properties
@@ -21,50 +21,6 @@ bulk.assessment.error.title=Not all evaluations could be successfully stored
 bulk.wizard.desc=With the tool "Bulk assessment" you can submit assessment data such as score, status, comments or return files for multiple course members in one step. 
 bulk.wizard.start=Select the button "$\:new.bulk" to prepare or execute a bulk assessment. More information about this process and the accepted file format can be found in the context help.
 bulk.wizard.title=Bulk assessment
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 choose.node.desc=Select the element from this course for which the bulk assessment should be executed. 
 choose.node.title=Select course element
 chooseColumns.description=Select the columns of your assessment data should be used during the import. 
@@ -83,11 +39,18 @@ form.step2.error=No assessment data have been submitted.
 form.step3.delimiter=$org.olat.course.assessment\:form.step3.delimiter
 form.step3.delimiter.comma=$org.olat.course.assessment\:form.step3.delimiter.comma
 form.step3.delimiter.tab=$org.olat.course.assessment\:form.step3.delimiter.tab
-
-
-
-
-
+form.step3.status=Status
+form.step3.status.assessed=Set to status "$org.olat.modules.assessment.ui\:assessment.status.done"
+form.step3.status.review=Set to status "$org.olat.modules.assessment.ui\:assessment.status.inReview"
+form.step3.status.dont.change=Do not change status
+form.step3.submission=Submission
+form.step3.submission.accept=Accept submission
+form.step3.submission.dont.change=Do not change
+form.step3.submission.help=Submission are only accepted if the option is choosed and points or "passed" are set.
+form.step3.visibility=Results visibility
+form.step3.visibility.visible=Directly visible for user
+form.step3.visibility.notvisible=Not yet visible for user
+form.step3.visibility.dont.change=Do not change results visibility
 new.bulk=Start new bulk assessment
 passed.false=$org.olat.course.assessment\:passed.false
 passed.true=$org.olat.course.assessment\:passed.true
diff --git a/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java b/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java
index 35766d859b2002388e8fdf1a8fc448011d383dec..cb82596b91800f4b8f3c20ab1ded55c2d15c1168 100644
--- a/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java
+++ b/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java
@@ -21,7 +21,7 @@ package org.olat.course.assessment.manager;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Date;
@@ -241,7 +241,7 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 		mail.setToId(creator);
 		mail.setFrom(WebappHelper.getMailConfig("mailReplyTo"));
 		List<Identity> modifiers = taskManager.getModifiers(task);
-		if(modifiers.size() > 0) {
+		if(!modifiers.isEmpty()) {
 			ContactList cc = new ContactList("CC");
 			cc.addAllIdentites(modifiers);
 			mail.setContactList(cc);
@@ -363,29 +363,32 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 				//esm.updateUserEfficiencyStatement(uce);
 			}
 			
+			boolean statusVisibilitySet = false;
+			
 			//update score
 			Float score = row.getScore();
-			if(hasScore && score != null){
+			if(hasScore && score != null) {
 				// score < minimum score
 				if ((min != null && score.floatValue() < min.floatValue()) || (score.floatValue() < AssessmentHelper.MIN_SCORE_SUPPORTED)) {
-					//"bulk.action.lessThanMin";
+					// "bulk.action.lessThanMin";
 				}
 				// score > maximum score
 				else if ((max != null && score.floatValue() > max.floatValue())
 						|| (score.floatValue() > AssessmentHelper.MAX_SCORE_SUPPORTED)) {
-					//"bulk.action.greaterThanMax";
+					// "bulk.action.greaterThanMax";
 				} else {
 					// score between minimum and maximum score
 					ScoreEvaluation se;
 					if (hasPassed && cut != null){
 						Boolean passed = (score.floatValue() >= cut.floatValue()) ? Boolean.TRUE	: Boolean.FALSE;
-						se = new ScoreEvaluation(score, passed);
+						se = new ScoreEvaluation(score, passed, datas.getStatus(), datas.getVisibility(), null, null, null, null);
 					} else {
-						se = new ScoreEvaluation(score, null);
+						se = new ScoreEvaluation(score, null, datas.getStatus(), datas.getVisibility(), null, null, null, null);
 					}
 					
 					// Update score,passed properties in db, and the user's efficiency statement
 					courseNode.updateUserScoreEvaluation(se, uce, coachIdentity, false, Role.auto);
+					statusVisibilitySet = true;
 				}
 			}
 			
@@ -393,14 +396,15 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 			if (hasPassed && passed != null && cut == null) { // Configuration of manual assessment --> Display passed/not passed: yes, Type of display: Manual by tutor
 				ScoreEvaluation seOld = courseNode.getUserScoreEvaluation(uce);
 				Float oldScore = seOld.getScore();
-				ScoreEvaluation se = new ScoreEvaluation(oldScore, passed);
+				ScoreEvaluation se = new ScoreEvaluation(oldScore, passed, datas.getStatus(), datas.getVisibility(), null, null, null, null);
 				// Update score,passed properties in db, and the user's efficiency statement
 				boolean incrementAttempts = false;
 				courseNode.updateUserScoreEvaluation(se, uce, coachIdentity, incrementAttempts, Role.auto);
+				statusVisibilitySet = true;
 			}
 			
 			boolean identityHasReturnFile = false;
-			if(hasReturnFiles && row.getReturnFiles() != null && row.getReturnFiles().size() > 0) {
+			if(hasReturnFiles && row.getReturnFiles() != null && !row.getReturnFiles().isEmpty()) {
 				String assessedId = row.getAssessedId();
 				File assessedFolder = new File(unzipped, assessedId);
 				identityHasReturnFile = assessedFolder.exists();
@@ -410,17 +414,29 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 			}
 			
 			if(courseNode instanceof GTACourseNode) {
+				boolean acceptSubmission = datas.getAcceptSubmission() != null && datas.getAcceptSubmission().booleanValue();
+
 				//push the state further
 				GTACourseNode gtaNode = (GTACourseNode)courseNode;
 				if((hasScore && score != null) || (hasPassed && passed != null)) {
 					//pushed to graded
-					updateTasksState(gtaNode, uce, TaskProcess.grading);
+					updateTasksState(gtaNode, uce, TaskProcess.grading, acceptSubmission);
 				} else if(hasReturnFiles) {
 					//push to revised
-					updateTasksState(gtaNode, uce, TaskProcess.correction);
+					updateTasksState(gtaNode, uce, TaskProcess.correction, acceptSubmission);
 				}
 			}
 			
+			if(!statusVisibilitySet && (datas.getStatus() != null || datas.getVisibility() != null)) {
+				ScoreEvaluation seOld = courseNode.getUserScoreEvaluation(uce);
+				ScoreEvaluation se = new ScoreEvaluation(seOld.getScore(), seOld.getPassed(),
+						datas.getStatus(), datas.getVisibility(), seOld.getFullyAssessed(),
+						seOld.getCurrentRunCompletion(), seOld.getCurrentRunStatus(), seOld.getAssessmentID());
+				// Update score,passed properties in db, and the user's efficiency statement
+				boolean incrementAttempts = false;
+				courseNode.updateUserScoreEvaluation(se, uce, coachIdentity, incrementAttempts, Role.auto);
+			}
+			
 			if(count++ % 5 == 0) {
 				dbInstance.commitAndCloseSession();
 			} else {
@@ -429,7 +445,7 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 		}
 	}
 	
-	private void updateTasksState(GTACourseNode courseNode, UserCourseEnvironment uce, TaskProcess status) {
+	private void updateTasksState(GTACourseNode courseNode, UserCourseEnvironment uce, TaskProcess status, boolean acceptSubmission) {
 		final GTAManager gtaManager = CoreSpringFactory.getImpl(GTAManager.class);
 		Identity identity = uce.getIdentityEnvironment().getIdentity();
 		RepositoryEntry entry = uce.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
@@ -442,14 +458,26 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 		} else {
 			gtaTask = gtaManager.getTask(identity, taskList);
 			if(gtaTask == null) {
-				gtaManager.createTask(null, taskList, status, null, identity, courseNode);
+				gtaTask = gtaManager.createTask(null, taskList, status, null, identity, courseNode);
 			}
 		}
 		
-		gtaManager.nextStep(status, courseNode);
+		if(gtaTask == null) {
+			log.error("GTA Task is null by bulk assessment for: " + identity + " in entry:" + entry + " " + courseNode.getIdent());
+		} else if(status == TaskProcess.correction) {
+			int iteration = gtaTask.getRevisionLoop() <= 0 ? 1 : gtaTask.getRevisionLoop() + 1;
+			gtaManager.updateTask(gtaTask, status, iteration, courseNode, Role.auto);
+		} else if(status == TaskProcess.grading && acceptSubmission) {
+			if(gtaTask.getTaskStatus() == TaskProcess.review
+					|| gtaTask.getTaskStatus() == TaskProcess.correction
+					|| gtaTask.getTaskStatus() == TaskProcess.revision) {
+				gtaTask = gtaManager.reviewedTask(gtaTask, courseNode, Role.auto);
+			}
+			TaskProcess nextStep = gtaManager.nextStep(status, courseNode);
+			gtaManager.updateTask(gtaTask, nextStep, courseNode, Role.auto);
+		}
 	}
 	
-	
 	private void processReturnFile(AssessableCourseNode courseNode, BulkAssessmentRow row, UserCourseEnvironment uce, File assessedFolder) {
 		String assessedId = row.getAssessedId();
 		Identity identity = uce.getIdentityEnvironment().getIdentity();
@@ -465,10 +493,9 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 
 				VFSLeaf returnLeaf = returnBox.createChildLeaf(returnFilename);
 				if(returnFile.exists()) {
-					try {
-						InputStream inStream = new FileInputStream(returnFile);
+					try(InputStream inStream = new FileInputStream(returnFile)) {
 						VFSManager.copyContent(inStream, returnLeaf);
-					} catch (FileNotFoundException e) {
+					} catch (IOException e) {
 						log.error("Cannot copy return file " + returnFilename + " from " + assessedId, e);
 					}
 				}
diff --git a/src/main/java/org/olat/course/assessment/model/BulkAssessmentDatas.java b/src/main/java/org/olat/course/assessment/model/BulkAssessmentDatas.java
index d0225276893cd89db58f00e3f8a8443cb71b274d..62f95ab1b783d4dac067dc0e686442e60aaa2fad 100644
--- a/src/main/java/org/olat/course/assessment/model/BulkAssessmentDatas.java
+++ b/src/main/java/org/olat/course/assessment/model/BulkAssessmentDatas.java
@@ -22,6 +22,8 @@ package org.olat.course.assessment.model;
 import java.io.Serializable;
 import java.util.List;
 
+import org.olat.modules.assessment.model.AssessmentEntryStatus;
+
 /**
  * 
  * Initial date: 20.11.2013<br>
@@ -31,9 +33,13 @@ import java.util.List;
 public class BulkAssessmentDatas implements Serializable {
 
 	private static final long serialVersionUID = 8109609348537626355L;
+	
 	private List<BulkAssessmentRow> rows;
 	private String returnFiles;
 	private String dataBackupFile;
+	private Boolean visibility;
+	private Boolean acceptSubmission;
+	private AssessmentEntryStatus status;
 	private BulkAssessmentColumnSettings columnsSettings;
 
 	public BulkAssessmentColumnSettings getColumnsSettings() {
@@ -71,4 +77,28 @@ public class BulkAssessmentDatas implements Serializable {
 	public void setDataBackupFile(String dataBackupFile) {
 		this.dataBackupFile = dataBackupFile;
 	}
+
+	public Boolean getVisibility() {
+		return visibility;
+	}
+
+	public void setVisibility(Boolean visibility) {
+		this.visibility = visibility;
+	}
+
+	public AssessmentEntryStatus getStatus() {
+		return status;
+	}
+
+	public void setStatus(AssessmentEntryStatus status) {
+		this.status = status;
+	}
+
+	public Boolean getAcceptSubmission() {
+		return acceptSubmission;
+	}
+
+	public void setAcceptSubmission(Boolean acceptSubmission) {
+		this.acceptSubmission = acceptSubmission;
+	}
 }
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 d5c3d59079db4ca11f97e9693e8b59369944ba2f..4f6419bb24361cfada8bac8d72181892905c0129 100644
--- a/src/main/java/org/olat/course/nodes/gta/GTAManager.java
+++ b/src/main/java/org/olat/course/nodes/gta/GTAManager.java
@@ -353,7 +353,7 @@ public interface GTAManager {
 	 * @param cNode
 	 * @return
 	 */
-	public Task reviewedTask(Task task, GTACourseNode cNode);
+	public Task reviewedTask(Task task, GTACourseNode cNode, Role by);
 	
 	public Task updateTask(Task task, TaskProcess newStatus, GTACourseNode cNode, Role by);
 	
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 35b3091a3dea064210329a42ec35c87320c2888f..bdebb8cae021c8632cfcbbed6dc38cc063531484 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
@@ -1573,11 +1573,11 @@ public class GTAManagerImpl implements GTAManager {
 	}
 	
 	@Override
-	public Task reviewedTask(Task task, GTACourseNode cNode) {
+	public Task reviewedTask(Task task, GTACourseNode cNode, Role by) {
 		TaskProcess solution = nextStep(TaskProcess.correction, cNode);
 		TaskImpl taskImpl = (TaskImpl)task;
 		taskImpl.setAcceptationDate(new Date());
-		return updateTask(taskImpl, solution, cNode, Role.coach);
+		return updateTask(taskImpl, solution, cNode, by);
 	}
 
 	@Override
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 59b9b68d45fd3dcd086a493264d47bd9c8d5cec9..ae132e3a3f8c626534067448d2edf53700f94b6b 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
@@ -561,13 +561,9 @@ public class GTACoachController extends GTAAbstractController implements Assessm
 
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
-		if(revisionDocumentsCtrl == source) {
-			cleanUpProcess();
-			process(ureq);
-		} else if(participantGradingCtrl == source) {
-			cleanUpProcess();
-			process(ureq);
-		} else if(groupGradingCtrl == source) {
+		if(revisionDocumentsCtrl == source
+				|| participantGradingCtrl == source
+				|| groupGradingCtrl == source) {
 			cleanUpProcess();
 			process(ureq);
 		} else if(submitCorrectionsCtrl == source) {
@@ -667,11 +663,11 @@ public class GTACoachController extends GTAAbstractController implements Assessm
 		//go to solution, grading or graded
 		if(task == null) {
 			TaskProcess firstStep = gtaManager.firstStep(gtaNode);
-			TaskList taskList = gtaManager.getTaskList(courseEnv.getCourseGroupManager().getCourseEntry(), gtaNode);
-			task = gtaManager.createAndPersistTask(null, taskList, firstStep, assessedGroup, assessedIdentity, gtaNode);
+			TaskList reloadedTaskList = gtaManager.getTaskList(courseEnv.getCourseGroupManager().getCourseEntry(), gtaNode);
+			task = gtaManager.createAndPersistTask(null, reloadedTaskList, firstStep, assessedGroup, assessedIdentity, gtaNode);
 		}
 		
-		gtaManager.reviewedTask(task, gtaNode);
+		gtaManager.reviewedTask(task, gtaNode, Role.coach);
 		showInfo("coach.documents.successfully.reviewed");
 		gtaManager.log("Review", "documents reviewed", task, getIdentity(), assessedIdentity, assessedGroup, courseEnv, gtaNode, Role.coach);
 		
@@ -825,7 +821,7 @@ public class GTACoachController extends GTAAbstractController implements Assessm
 			contactList.add(assessedIdentity);			
 		}
 		// open dialog with mail form
-		if (contactList != null && contactList.getEmailsAsStrings().size() > 0) {
+		if (contactList != null && !contactList.getEmailsAsStrings().isEmpty()) {
 			removeAsListenerAndDispose(emailController);
 			
 			ContactMessage cmsg = new ContactMessage(ureq.getIdentity());
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 01f625edd093b687fc7b99be9dcc84c0bac4659f..a70ad880f48e930f6185416b097a7bab89328d9e 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
@@ -411,7 +411,7 @@ public class GTACoachRevisionAndCorrectionsController extends BasicController im
 	}
 	
 	private void doCloseRevisionProcess() {
-		assignedTask = gtaManager.reviewedTask(assignedTask, gtaNode);
+		assignedTask = gtaManager.reviewedTask(assignedTask, gtaNode, Role.coach);
 		gtaManager.log("Revision", "close revision", assignedTask,
 				getIdentity(), assessedIdentity, assessedGroup, courseEnv, gtaNode, Role.coach);
 	}