diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
index 72c1be1244adb179ae557de63489e736fc692928..0d1b77e758a275fc322a28e5875bfb357b927f73 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
@@ -854,27 +854,29 @@ public class IdentityListCourseNodeController extends FormBasicController
 		} else if(courseNode instanceof AssessableCourseNode) {
 			ICourse course = CourseFactory.loadCourse(courseEntry);
 			AssessableCourseNode assessableCourseNode = (AssessableCourseNode)courseNode;
-			
 			for(AssessedIdentityElementRow row:rows) {
 				Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey());
-				
-				Roles roles = securityManager.getRoles(assessedIdentity);
-				
-				IdentityEnvironment identityEnv = new IdentityEnvironment(assessedIdentity, roles);
-				UserCourseEnvironment assessedUserCourseEnv = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment(), coachCourseEnv.isCourseReadOnly());
-				assessedUserCourseEnv.getScoreAccounting().evaluateAll();
-
-				ScoreEvaluation scoreEval = assessableCourseNode.getUserScoreEvaluation(assessedUserCourseEnv);
-				ScoreEvaluation doneEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
-						AssessmentEntryStatus.done, null, scoreEval.getFullyAssessed(),
-						scoreEval.getCurrentRunCompletion(), scoreEval.getCurrentRunStatus(), scoreEval.getAssessmentID());
-				assessableCourseNode.updateUserScoreEvaluation(doneEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
+				doSetDone(assessedIdentity, assessableCourseNode, course);
 			}
-			
 			loadModel(ureq);
 		}
 	}
 	
+	protected void doSetDone(Identity assessedIdentity, AssessableCourseNode assessableCourseNode, ICourse course) {
+		Roles roles = securityManager.getRoles(assessedIdentity);
+		
+		IdentityEnvironment identityEnv = new IdentityEnvironment(assessedIdentity, roles);
+		UserCourseEnvironment assessedUserCourseEnv = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment(), coachCourseEnv.isCourseReadOnly());
+		assessedUserCourseEnv.getScoreAccounting().evaluateAll();
+
+		ScoreEvaluation scoreEval = assessableCourseNode.getUserScoreEvaluation(assessedUserCourseEnv);
+		ScoreEvaluation doneEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
+				AssessmentEntryStatus.done, null, scoreEval.getFullyAssessed(),
+				scoreEval.getCurrentRunCompletion(), scoreEval.getCurrentRunStatus(), scoreEval.getAssessmentID());
+		assessableCourseNode.updateUserScoreEvaluation(doneEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
+		
+	}
+	
 	private void doUpdateCompletion(Double completion, AssessmentRunStatus status, Long assessedIdentityKey) {
 		List<AssessedIdentityElementRow> rows = usersTableModel.getObjects();
 		for(AssessedIdentityElementRow row:rows) {
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/tools/AbstractToolsController.java b/src/main/java/org/olat/course/assessment/ui/tool/tools/AbstractToolsController.java
index 5415d1822873d0a56e23edfcf147873c5f95c725..5a23115242cfe6548d5c8da4b396984a53e68a31 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/tools/AbstractToolsController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/tools/AbstractToolsController.java
@@ -45,6 +45,7 @@ import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.assessment.Role;
 import org.olat.modules.assessment.model.AssessmentEntryStatus;
 import org.olat.modules.assessment.model.AssessmentRunStatus;
+import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -71,6 +72,7 @@ public abstract class AbstractToolsController extends BasicController {
 	
 	private final boolean courseReadonly;
 	protected final Identity assessedIdentity;
+	private final RepositoryEntry courseEntry;
 	private final AssessmentEvaluation scoreEval;
 	protected final AssessableCourseNode courseNode;
 	protected final UserCourseEnvironment assessedUserCourseEnv;
@@ -88,6 +90,7 @@ public abstract class AbstractToolsController extends BasicController {
 		this.courseNode = courseNode;
 		this.assessedIdentity = assessedIdentity;
 		courseReadonly = coachCourseEnv.isCourseReadOnly();
+		courseEntry = coachCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 
 		assessedUserCourseEnv = AssessmentHelper
 				.createAndInitUserCourseEnvironment(assessedIdentity, coachCourseEnv.getCourseEnvironment());
@@ -98,6 +101,10 @@ public abstract class AbstractToolsController extends BasicController {
 		return courseReadonly;
 	}
 	
+	public RepositoryEntry getCourseRepositoryEntry() {
+		return courseEntry;
+	}
+	
 	protected final void initTools() {
 		initDetails();
 		initStatus();
@@ -219,26 +226,34 @@ public abstract class AbstractToolsController extends BasicController {
 	
 	private void doReopen(UserRequest ureq) {
 		if (scoreEval != null) {
-			ScoreEvaluation reopenedEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
-					AssessmentEntryStatus.inReview, scoreEval.getUserVisible(), scoreEval.getFullyAssessed(),
-					scoreEval.getCurrentRunCompletion(), AssessmentRunStatus.running,
-					scoreEval.getAssessmentID());
-			courseNode.updateUserScoreEvaluation(reopenedEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
+			reopenEvaluation();
 		}
 		fireEvent(ureq, Event.CHANGED_EVENT);
 	}
 	
+	protected void reopenEvaluation() {
+		ScoreEvaluation reopenedEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
+				AssessmentEntryStatus.inReview, scoreEval.getUserVisible(), scoreEval.getFullyAssessed(),
+				scoreEval.getCurrentRunCompletion(), AssessmentRunStatus.running,
+				scoreEval.getAssessmentID());
+		courseNode.updateUserScoreEvaluation(reopenedEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
+	}
+	
 	private void doSetDone(UserRequest ureq) {
 		if (scoreEval != null) {
-			ScoreEvaluation doneEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
-					AssessmentEntryStatus.done, scoreEval.getUserVisible(), scoreEval.getFullyAssessed(),
-					scoreEval.getCurrentRunCompletion(), scoreEval.getCurrentRunStatus(),
-					scoreEval.getAssessmentID());
-			courseNode.updateUserScoreEvaluation(doneEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
+			doneEvalution();
 		}
 		fireEvent(ureq, Event.CHANGED_EVENT);
 	}
 	
+	protected void doneEvalution() {
+		ScoreEvaluation doneEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
+				AssessmentEntryStatus.done, scoreEval.getUserVisible(), scoreEval.getFullyAssessed(),
+				scoreEval.getCurrentRunCompletion(), scoreEval.getCurrentRunStatus(),
+				scoreEval.getAssessmentID());
+		courseNode.updateUserScoreEvaluation(doneEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
+	}
+	
 	private void doSetVisibility(UserRequest ureq, boolean visible) {
 		if (scoreEval != null) {
 			ScoreEvaluation doneEval = new ScoreEvaluation(scoreEval.getScore(), scoreEval.getPassed(),
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java
index 35ca370aca0246bc338de5c253223354211bd04c..90925fe07e02b066f84a9c9315eb0f837907bb46 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeController.java
@@ -36,7 +36,9 @@ 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.generic.closablewrapper.CloseableModalController;
+import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
+import org.olat.course.ICourse;
 import org.olat.course.archiver.ArchiveResource;
 import org.olat.course.assessment.bulk.BulkAssessmentToolController;
 import org.olat.course.assessment.ui.tool.IdentityListCourseNodeController;
@@ -48,10 +50,12 @@ 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.TaskList;
+import org.olat.course.nodes.gta.TaskProcess;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.group.BusinessGroup;
 import org.olat.modules.ModuleConfiguration;
 import org.olat.modules.assessment.AssessmentToolOptions;
+import org.olat.modules.assessment.Role;
 import org.olat.modules.assessment.ui.AssessedIdentityElementRow;
 import org.olat.modules.assessment.ui.AssessmentToolContainer;
 import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
@@ -69,7 +73,8 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeController {
 	
-	private FormLink downloadButton, groupAssessmentButton;
+	private FormLink downloadButton;
+	private FormLink groupAssessmentButton;
 	
 	private GroupAssessmentController assessmentCtrl;
 	
@@ -198,6 +203,23 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC
 		super.cleanUp();
 	}
 	
+	@Override
+	protected Controller createCalloutController(UserRequest ureq, Identity assessedIdentity) {
+		return new GTAIdentityListCourseNodeToolsController(ureq, getWindowControl(),
+				(AssessableCourseNode)courseNode, assessedIdentity, coachCourseEnv);
+	}
+
+	@Override
+	protected void doSetDone(Identity assessedIdentity, AssessableCourseNode assessableCourseNode, ICourse course) {
+		super.doSetDone(assessedIdentity, assessableCourseNode, course);
+		
+		TaskList taskList = gtaManager.getTaskList(getCourseRepositoryEntry(), (GTACourseNode)assessableCourseNode);
+		Task task = gtaManager.getTask(assessedIdentity, taskList);
+		if(task != null) {
+			gtaManager.updateTask(task, TaskProcess.graded, (GTACourseNode)assessableCourseNode, Role.coach);
+		}
+	}
+
 	private void doDownload(UserRequest ureq) {
 		AssessmentToolOptions asOptions = getOptions();
 		OLATResource courseOres = getCourseRepositoryEntry().getOlatResource();
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeToolsController.java b/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeToolsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a3c6abf42f2dadf9a36e2984422cf623407991f
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GTAIdentityListCourseNodeToolsController.java
@@ -0,0 +1,77 @@
+/**
+ * <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.control.WindowControl;
+import org.olat.core.id.Identity;
+import org.olat.course.assessment.ui.tool.tools.AbstractToolsController;
+import org.olat.course.nodes.AssessableCourseNode;
+import org.olat.course.nodes.GTACourseNode;
+import org.olat.course.nodes.gta.GTAManager;
+import org.olat.course.nodes.gta.Task;
+import org.olat.course.nodes.gta.TaskList;
+import org.olat.course.nodes.gta.TaskProcess;
+import org.olat.course.run.userview.UserCourseEnvironment;
+import org.olat.modules.assessment.Role;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 26 Oct 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class GTAIdentityListCourseNodeToolsController extends AbstractToolsController {
+	
+	@Autowired
+	private GTAManager gtaManager;
+	
+	public GTAIdentityListCourseNodeToolsController(UserRequest ureq, WindowControl wControl,
+			AssessableCourseNode courseNode, Identity assessedIdentity, UserCourseEnvironment coachCourseEnv) {
+		super(ureq, wControl, courseNode, assessedIdentity, coachCourseEnv);
+		
+		initTools();
+	}
+	
+	
+
+	@Override
+	protected void reopenEvaluation() {
+		super.reopenEvaluation();
+
+		TaskList taskList = gtaManager.getTaskList(getCourseRepositoryEntry(), (GTACourseNode)courseNode);
+		Task task = gtaManager.getTask(assessedIdentity, taskList);
+		if(task != null && task.getTaskStatus() == TaskProcess.graded) {
+			gtaManager.updateTask(task, TaskProcess.grading, (GTACourseNode)courseNode, Role.coach);
+		}
+	}
+
+	@Override
+	protected void doneEvalution() {
+		super.doneEvalution();
+		
+		TaskList taskList = gtaManager.getTaskList(getCourseRepositoryEntry(), (GTACourseNode)courseNode);
+		Task task = gtaManager.getTask(assessedIdentity, taskList);
+		if(task != null) {
+			gtaManager.updateTask(task, TaskProcess.graded, (GTACourseNode)courseNode, Role.coach);
+		}
+	}
+}
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 7c0ed4dd7eb60aad752dc63d09d9853239cfdfb8..312687216a1fdfc38fa990296e1f573b8d1d8a07 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
@@ -183,7 +183,7 @@ process.assignment=Affectation
 process.assignment.explanation=L'utilisateur est en train de choisir un devoir.
 process.correction=Corrections
 process.correction.explanation=Le coach corrige un document d\u00E9j\u00E0 r\u00E9vis\u00E9
-process.graded=Evaluation
+process.graded=Evalu\u00E9
 process.grading=Evaluation
 process.grading.explanation=Le coach \u00E9value un devoir.
 process.no=Affectation