diff --git a/src/main/java/org/olat/course/nodes/ms/AuditEnv.java b/src/main/java/org/olat/course/nodes/ms/AuditEnv.java
new file mode 100644
index 0000000000000000000000000000000000000000..75dbd1dc5236ae499479cc001547d1bd5a0cd4b9
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/ms/AuditEnv.java
@@ -0,0 +1,94 @@
+/**
+ * <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.ms;
+
+import org.olat.core.id.Identity;
+import org.olat.course.auditing.UserNodeAuditManager;
+import org.olat.course.nodes.CourseNode;
+import org.olat.modules.assessment.Role;
+
+/**
+ * 
+ * Initial date: 18 Jun 2019<br>
+ * @author uhensler, urs.hensler@frentix.com, http://www.frentix.com
+ *
+ */
+public interface AuditEnv {
+	
+	UserNodeAuditManager getAuditManager();
+	
+	CourseNode getCourseNode();
+	
+	Identity getAssessedIdentity();
+	
+	Identity getIdentity();
+	
+	Role getBy();
+	
+	public static AuditEnv of(UserNodeAuditManager auditManager, CourseNode courseNode, Identity assessedIdentity,
+				Identity identity, Role by) {
+		return new AuditEnvImpl(auditManager, courseNode, assessedIdentity, identity, by);
+	}
+	
+	static class AuditEnvImpl implements AuditEnv {
+		
+		private final UserNodeAuditManager auditManager;
+		private final CourseNode courseNode;
+		private final Identity assessedIdentity;
+		private final Identity identity;
+		private final Role by;
+		
+		private AuditEnvImpl(UserNodeAuditManager auditManager, CourseNode courseNode, Identity assessedIdentity,
+				Identity identity, Role by) {
+			this.auditManager = auditManager;
+			this.courseNode = courseNode;
+			this.assessedIdentity = assessedIdentity;
+			this.identity = identity;
+			this.by = by;
+		}
+		
+		@Override
+		public UserNodeAuditManager getAuditManager() {
+			return auditManager;
+		}
+		
+		@Override
+		public CourseNode getCourseNode() {
+			return courseNode;
+		}
+
+		@Override
+		public Identity getAssessedIdentity() {
+			return assessedIdentity;
+		}
+
+		@Override
+		public Identity getIdentity() {
+			return identity;
+		}
+		
+		@Override
+		public Role getBy() {
+			return by;
+		}
+		
+	}
+
+}
diff --git a/src/main/java/org/olat/course/nodes/ms/MSEvaluationFormExecutionController.java b/src/main/java/org/olat/course/nodes/ms/MSEvaluationFormExecutionController.java
index dd7a9428f9f799e8306336c8e1622d7635a3a5a5..61e83ceb5483c4782ca21d050ead1ef3fe2aecdf 100644
--- a/src/main/java/org/olat/course/nodes/ms/MSEvaluationFormExecutionController.java
+++ b/src/main/java/org/olat/course/nodes/ms/MSEvaluationFormExecutionController.java
@@ -31,6 +31,7 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.id.Identity;
 import org.olat.course.assessment.AssessmentManager;
 import org.olat.course.assessment.ui.tool.AssessmentFormCallback;
+import org.olat.course.auditing.UserNodeAuditManager;
 import org.olat.course.nodes.MSCourseNode;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
@@ -59,6 +60,7 @@ public class MSEvaluationFormExecutionController extends BasicController impleme
 	private final ModuleConfiguration config;
 	private final MSCourseNode msCourseNode;
 
+	private final AuditEnv auditEnv;
 	private EvaluationFormSession session;
 	private boolean assessmentDone;
 
@@ -72,11 +74,14 @@ public class MSEvaluationFormExecutionController extends BasicController impleme
 		this.msCourseNode = msCourseNode;
 		this.config = msCourseNode.getModuleConfiguration();
 		
+		Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
+		UserNodeAuditManager auditManager = assessedUserCourseEnv.getCourseEnvironment().getAuditManager();
+		this.auditEnv = AuditEnv.of(auditManager , msCourseNode, assessedIdentity, getIdentity(), Role.coach);
+
 		RepositoryEntry formEntry = MSCourseNode.getEvaluationForm(config);
 		RepositoryEntry ores = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 		String nodeIdent = msCourseNode.getIdent();
-		Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
-		session =  msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity);
+		session =  msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity, auditEnv);
 		
 		AssessmentManager am = assessedUserCourseEnv.getCourseEnvironment().getAssessmentManager();
 		AssessmentEntry aEntry = am.getAssessmentEntry(msCourseNode, assessedIdentity);
@@ -118,21 +123,21 @@ public class MSEvaluationFormExecutionController extends BasicController impleme
 	@Override
 	public void assessmentDone(UserRequest ureq) {
 		assessmentDone = true;
-		session = msService.closeSession(session);
+		session = msService.closeSession(session, auditEnv);
 		updateUI(ureq);
 	}
 
 	@Override
 	public void assessmentReopen(UserRequest ureq) {
 		assessmentDone = false;
-		session = msService.reopenSession(session);
+		session = msService.reopenSession(session, auditEnv);
 		updateUI(ureq);
 	}
 
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == reopenLink) {
-			session = msService.reopenSession(session);
+			session = msService.reopenSession(session, auditEnv);
 			updateUI(ureq);
 		}
 	}
diff --git a/src/main/java/org/olat/course/nodes/ms/MSResultDetailsController.java b/src/main/java/org/olat/course/nodes/ms/MSResultDetailsController.java
index 6fa8181f60cfd85a58ae70674498918a4faaa11f..17b3480616587020981abc9c72cfee3fdd6d1eb6 100644
--- a/src/main/java/org/olat/course/nodes/ms/MSResultDetailsController.java
+++ b/src/main/java/org/olat/course/nodes/ms/MSResultDetailsController.java
@@ -35,9 +35,11 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
 import org.olat.course.assessment.AssessmentHelper;
+import org.olat.course.auditing.UserNodeAuditManager;
 import org.olat.course.nodes.MSCourseNode;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.modules.ModuleConfiguration;
+import org.olat.modules.assessment.Role;
 import org.olat.modules.forms.EvaluationFormSession;
 import org.olat.modules.forms.RubricStatistic;
 import org.olat.modules.forms.model.xml.Rubric;
@@ -74,7 +76,9 @@ public class MSResultDetailsController extends BasicController {
 		RepositoryEntry ores = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 		String nodeIdent = msCourseNode.getIdent();
 		Identity assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
-		session = msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity);
+		UserNodeAuditManager auditManager = assessedUserCourseEnv.getCourseEnvironment().getAuditManager();
+		AuditEnv auditEnv = AuditEnv.of(auditManager , msCourseNode, assessedIdentity, getIdentity(), Role.coach);
+		session =  msService.getOrCreateSession(formEntry, ores, nodeIdent, assessedIdentity, auditEnv);
 		List<RubricStatistic> statistics = msService.getRubricStatistics(session);
 		
 		String scoreConfig = config.getStringValue(MSCourseNode.CONFIG_KEY_SCORE);
diff --git a/src/main/java/org/olat/course/nodes/ms/MSService.java b/src/main/java/org/olat/course/nodes/ms/MSService.java
index 66ca8db523d008fb51e0a946b74afbcfc8d33538..d81b4f83f886490713840b97674f0f3146aabde1 100644
--- a/src/main/java/org/olat/course/nodes/ms/MSService.java
+++ b/src/main/java/org/olat/course/nodes/ms/MSService.java
@@ -37,13 +37,13 @@ import org.olat.repository.RepositoryEntry;
 public interface MSService {
 	
 	EvaluationFormSession getOrCreateSession(RepositoryEntry formEntry, RepositoryEntry ores, String nodeIdent,
-			Identity assessedIdentity);
+			Identity assessedIdentity, AuditEnv auditEnv);
 
 	EvaluationFormSession getSession(EvaluationFormSessionRef sessionRef);
 
-	EvaluationFormSession closeSession(EvaluationFormSession session);
+	EvaluationFormSession closeSession(EvaluationFormSession session, AuditEnv auditEnv);
 
-	EvaluationFormSession reopenSession(EvaluationFormSession session);
+	EvaluationFormSession reopenSession(EvaluationFormSession session, AuditEnv auditEnv);
 
 	boolean hasSessions(OLATResourceable ores, String nodeIdent);
 	
diff --git a/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java b/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java
index ac5875c6d4230e1fd42eade05918b5e32d2b206d..af0a63423c9747b29079701077dbd00534bfbd9c 100644
--- a/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java
+++ b/src/main/java/org/olat/course/nodes/ms/manager/MSServiceImpl.java
@@ -26,6 +26,8 @@ import java.util.List;
 
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.course.auditing.UserNodeAuditManager;
+import org.olat.course.nodes.ms.AuditEnv;
 import org.olat.course.nodes.ms.MSService;
 import org.olat.course.nodes.ms.MinMax;
 import org.olat.modules.forms.EvaluationFormManager;
@@ -61,11 +63,11 @@ public class MSServiceImpl implements MSService {
 	
 	@Override
 	public EvaluationFormSession getOrCreateSession(RepositoryEntry formEntry, RepositoryEntry ores, String nodeIdent,
-			Identity assessedIdentity) {
+			Identity assessedIdentity, AuditEnv auditEnv) {
 		EvaluationFormSurveyIdentifier surveyIdent = of(ores, nodeIdent, assessedIdentity.getKey().toString());
 		EvaluationFormSurvey survey = loadOrCreateSurvey(formEntry, surveyIdent);
 		EvaluationFormParticipation participation = loadOrCreateParticipation(survey);
-		return loadOrCreateSesssion(participation);
+		return loadOrCreateSesssion(participation, auditEnv);
 	}
 	
 	private EvaluationFormSurvey loadOrCreateSurvey(RepositoryEntry formEntry, EvaluationFormSurveyIdentifier surveyIdent) {
@@ -86,10 +88,11 @@ public class MSServiceImpl implements MSService {
 		return loadedParticipation;
 	}
 
-	private EvaluationFormSession loadOrCreateSesssion(EvaluationFormParticipation participation) {
+	private EvaluationFormSession loadOrCreateSesssion(EvaluationFormParticipation participation, AuditEnv auditEnv) {
 		EvaluationFormSession session = evaluationFormManager.loadSessionByParticipation(participation);
 		if (session == null) {
 			session = evaluationFormManager.createSession(participation);
+			logAudit(auditEnv, "Completion of evaluation form started");
 		}
 		return session;
 	}
@@ -100,13 +103,17 @@ public class MSServiceImpl implements MSService {
 	}
 
 	@Override
-	public EvaluationFormSession closeSession(EvaluationFormSession session) {
-		return evaluationFormManager.finishSession(session);
+	public EvaluationFormSession closeSession(EvaluationFormSession session, AuditEnv auditEnv) {
+		EvaluationFormSession finishSession = evaluationFormManager.finishSession(session);
+		logAudit(auditEnv, "Completion of evaluation form finished");
+		return finishSession;
 	}
 
 	@Override
-	public EvaluationFormSession reopenSession(EvaluationFormSession session) {
-		return evaluationFormManager.reopenSession(session);
+	public EvaluationFormSession reopenSession(EvaluationFormSession session, AuditEnv auditEnv) {
+		EvaluationFormSession reopenSession = evaluationFormManager.reopenSession(session);
+		logAudit(auditEnv, "Evaluation form reopened");
+		return reopenSession;
 	}
 
 	@Override
@@ -253,4 +260,14 @@ public class MSServiceImpl implements MSService {
 		return scale * score.floatValue();
 	}
 
+	private void logAudit(AuditEnv auditEnv, String message) {
+		UserNodeAuditManager am = auditEnv.getAuditManager();
+		am.appendToUserNodeLog(
+				auditEnv.getCourseNode(),
+				auditEnv.getIdentity(),
+				auditEnv.getAssessedIdentity(),
+				message,
+				auditEnv.getBy());
+	}
+
 }