diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java
index 4d1e27843d31de716cb6f9415b28e5fad39ed035..34eee9b60d42452c461385601a2c26c8e2f5e298 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java
@@ -169,6 +169,9 @@ public enum TextMode {
 
 		public String getText() {
 			StringBuilder content = new StringBuilder(1024);
+			if(sb.length() > 0) {
+				content.append(sb);
+			}
 			for(String line:lines) {
 				line = line.trim();
 				if(StringHelper.containsNonWhitespace(line)) {
diff --git a/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java b/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java
index efd64c066766527a267b9b403a2b6869750b5bf2..e4f5957210cb79eb465ad444051b2af81e924c2a 100644
--- a/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java
+++ b/src/main/java/org/olat/course/assessment/bulk/BulkAssessmentToolController.java
@@ -37,7 +37,6 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.wizard.Step;
 import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
 import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
 import org.olat.course.assessment.manager.BulkAssessmentTask;
 import org.olat.course.assessment.model.BulkAssessmentDatas;
 import org.olat.course.assessment.model.BulkAssessmentFeedback;
@@ -94,6 +93,9 @@ public class BulkAssessmentToolController extends BasicController {
 				bulkAssessmentCtrl = null;
 				if(event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) {
 					doBulkAssessmentSynchronous(ureq, feedback);
+					fireEvent(ureq, Event.CHANGED_EVENT);
+				} else {
+					fireEvent(ureq, Event.DONE_EVENT);
 				}
 			}
 		}
@@ -101,15 +103,12 @@ public class BulkAssessmentToolController extends BasicController {
 	}
 
 	private void doOpen(UserRequest ureq) {
-		StepRunnerCallback finish = new StepRunnerCallback() {
-			@Override
-			public Step execute(UserRequest uureq, WindowControl bwControl, StepsRunContext runContext) {
-				Date scheduledDate = (Date)runContext.get("scheduledDate");
-				BulkAssessmentDatas datas = (BulkAssessmentDatas)runContext.get("datas");
-				Feedback feedback = doBulkAssessment(scheduledDate, datas);
-				runContext.put("feedback", feedback);
-				return StepsMainRunController.DONE_MODIFIED;
-			}
+		StepRunnerCallback finish = (uureq, bwControl, runContext) -> {
+			Date scheduledDate = (Date)runContext.get("scheduledDate");
+			BulkAssessmentDatas datas = (BulkAssessmentDatas)runContext.get("datas");
+			Feedback feedback = doBulkAssessment(scheduledDate, datas);
+			runContext.put("feedback", feedback);
+			return StepsMainRunController.DONE_MODIFIED;
 		};
 		
 		Step start = new BulkAssessment_2_DatasStep(ureq, courseNode);
diff --git a/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java b/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java
index 8ca3fc47f1fe82104a9dc366a1ac509234f6a6a2..b4fb25da24225ec9f94e595de2431358faeb65d4 100644
--- a/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java
+++ b/src/main/java/org/olat/course/assessment/bulk/ChooseColumnsStepForm.java
@@ -40,6 +40,7 @@ import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
 import org.olat.core.gui.control.generic.wizard.StepsEvent;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.filter.FilterFactory;
 import org.olat.course.assessment.model.BulkAssessmentColumnSettings;
 import org.olat.course.assessment.model.BulkAssessmentDatas;
 import org.olat.course.assessment.model.BulkAssessmentRow;
@@ -55,9 +56,15 @@ import org.olat.course.nodes.AssessableCourseNode;
 public class ChooseColumnsStepForm extends StepFormBasicController {
 
 	private int numOfColumns;
-	private SingleSelection userNameColumnEl, scoreColumnEl, passedColumnEl, commentColumnEl;
+	private SingleSelection scoreColumnEl;
+	private SingleSelection passedColumnEl;
+	private SingleSelection commentColumnEl;
+	private SingleSelection userNameColumnEl;
 	private final OverviewDataModel overviewDataModel;
 	private final BulkAssessmentColumnSettings columnsSettings;
+	
+	private final String translatedPassed;
+	private final String translatedFailed;
 
 	public ChooseColumnsStepForm(UserRequest ureq, WindowControl wControl, BulkAssessmentColumnSettings columnsSettings,
 			StepsRunContext runContext, Form rootForm) {
@@ -67,10 +74,13 @@ public class ChooseColumnsStepForm extends StepFormBasicController {
 
 		@SuppressWarnings("unchecked")
 		List<String[]> splittedRows = (List<String[]>)getFromRunContext("splittedRows");
-		if(splittedRows.size() > 0) {
+		if(!splittedRows.isEmpty()) {
 			numOfColumns = splittedRows.get(0).length;
 		}
 
+		translatedPassed = FilterFactory.getHtmlTagsFilter().filter(translate("passed.true")).trim();
+		translatedFailed = FilterFactory.getHtmlTagsFilter().filter(translate("passed.false")).trim();
+
 		overviewDataModel = new OverviewDataModel(splittedRows);
 		initForm(ureq);
 	}
@@ -160,15 +170,17 @@ public class ChooseColumnsStepForm extends StepFormBasicController {
 
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
-		boolean allOk = true;
+		boolean allOk = super.validateFormLogic(ureq);
 		
-		userNameColumnEl.clearError();
-		if(userNameColumnEl != null && !userNameColumnEl.isOneSelected()) {
-			userNameColumnEl.setErrorKey("form.legende.mandatory", null);
-			allOk &= false;
+		if(userNameColumnEl != null) {
+			userNameColumnEl.clearError();
+			if(!userNameColumnEl.isOneSelected()) {
+				userNameColumnEl.setErrorKey("form.legende.mandatory", null);
+				allOk &= false;
+			}
 		}
 		
-		return allOk & super.validateFormLogic(ureq);
+		return allOk;
 	}
 
 	@Override
@@ -224,7 +236,7 @@ public class ChooseColumnsStepForm extends StepFormBasicController {
 		}
 
 		String identifyer = values[settings.getUsernameColumn()];
-		identifyer.trim();
+		identifyer = identifyer.trim();
 		if (!StringHelper.containsNonWhitespace(identifyer)) {
 			identifyer = "-";
 		}
@@ -258,19 +270,24 @@ public class ChooseColumnsStepForm extends StepFormBasicController {
 
 		if(valuesLength > settings.getPassedColumn()) {
 			String passedStr = values[settings.getPassedColumn()];
-			passedStr= passedStr.trim();
+			passedStr = passedStr.trim();
+			
+			
+
 			Boolean passed;
 			if ("y".equalsIgnoreCase(passedStr)
 					|| "yes".equalsIgnoreCase(passedStr)
 					|| "passed".equalsIgnoreCase(passedStr)
 					|| "true".equalsIgnoreCase(passedStr)
-					|| "1".equalsIgnoreCase(passedStr)) {
+					|| "1".equalsIgnoreCase(passedStr)
+					|| translatedPassed.equalsIgnoreCase(passedStr)) {
 				passed = Boolean.TRUE;
 			} else if ("n".equalsIgnoreCase(passedStr)
 					|| "no".equalsIgnoreCase(passedStr)
 					|| "false".equalsIgnoreCase(passedStr)
 					|| "failed".equalsIgnoreCase(passedStr)
-					|| "0".equalsIgnoreCase(passedStr)) {
+					|| "0".equalsIgnoreCase(passedStr)
+					|| translatedFailed.equalsIgnoreCase(passedStr)) {
 				passed = Boolean.FALSE;
 			} else {
 				// only set defined values, ignore everything else
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 cd6dd63c9752b7c17215e49d523a3591d6e9f6c5..88bcd7b095f0acb53b0e86922a74841fd52a7b08 100644
--- a/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java
+++ b/src/main/java/org/olat/course/assessment/bulk/DataStepForm.java
@@ -24,6 +24,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.ArrayList;
@@ -125,7 +126,7 @@ public class DataStepForm extends StepFormBasicController {
 		if(savedDatas != null && StringHelper.containsNonWhitespace(savedDatas.getDataBackupFile())) {
 			VFSLeaf file = VFSManager.olatRootLeaf(savedDatas.getDataBackupFile());
 			try(InputStream in = file.getInputStream()) {
-				dataVal = IOUtils.toString(in, "UTF-8");
+				dataVal = IOUtils.toString(in, StandardCharsets.UTF_8);
 			} catch (IOException e) {
 				logError("", e);
 			}
@@ -283,7 +284,7 @@ public class DataStepForm extends StepFormBasicController {
 		}
 
 		try(OutputStream out = inputFile.getOutputStream(false)) {
-			IOUtils.write(val, out, "UTF-8");
+			IOUtils.write(val, out, StandardCharsets.UTF_8);
 			datas.setDataBackupFile(inputFile.getRelPath());
 		} catch (IOException e) {
 			logError("", e);
diff --git a/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java b/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java
index 19c4a400e50f670360609ff9d9f719a69ca04335..848d53c7463196fad95bd9cea04b3cfe0716726a 100644
--- a/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java
+++ b/src/main/java/org/olat/course/assessment/bulk/ValidationStepForm.java
@@ -120,21 +120,21 @@ public class ValidationStepForm extends StepFormBasicController {
 		if(datas.getRows() != null) {
 			doValidateRows(datas);
 		}
-		flc.contextPut("hasNoItems", Boolean.valueOf(datas.getRows() == null ||  datas.getRows().size() == 0));			
+		flc.contextPut("hasNoItems", Boolean.valueOf(datas.getRows() == null || datas.getRows().isEmpty()));			
 	}
 	
 	private void doValidateRows(BulkAssessmentDatas datas) {
 		List<BulkAssessmentRow> rows = datas.getRows();
 		
-		List<String> assessedIdList = new ArrayList<String>(rows.size());
+		List<String> assessedIdList = new ArrayList<>(rows.size());
 		for(BulkAssessmentRow row : rows) {
 			assessedIdList.add(row.getAssessedId());
 		}
 		
 		Map<String,Identity> idToIdentityMap = loadAssessedIdentities(assessedIdList);
 
-		List<UserData> validDatas = new ArrayList<UserData>(idToIdentityMap.size());
-		List<UserData> invalidDatas = new ArrayList<UserData>(rows.size() - idToIdentityMap.size());
+		List<UserData> validDatas = new ArrayList<>(idToIdentityMap.size());
+		List<UserData> invalidDatas = new ArrayList<>(rows.size() - idToIdentityMap.size());
 		for(BulkAssessmentRow row : datas.getRows()) {
 			Identity foundIdentity = idToIdentityMap.get(row.getAssessedId());
 			if(foundIdentity == null) {
@@ -153,7 +153,7 @@ public class ValidationStepForm extends StepFormBasicController {
 	}
 	
 	private Map<String,Identity> loadAssessedIdentities(List<String> assessedIdList) {
-		Map<String,Identity> idToIdentityMap = new HashMap<String, Identity>();
+		Map<String,Identity> idToIdentityMap = new HashMap<>();
 		
 		for(String assessedId : assessedIdList) {
 			Identity identity = securityManager.findIdentityByName(assessedId);
diff --git a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java
index fae0d16ade05d801df6a89c455c010f6e1a6d33b..01cdd892d39f0f6eeb02a1dad854989355b62194 100644
--- a/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java
+++ b/src/main/java/org/olat/course/assessment/model/BulkAssessmentSettings.java
@@ -1,4 +1,5 @@
 /**
+
  * <a href="http://www.openolat.org">
  * OpenOLAT - Online Learning and Training</a><br>
  * <p>
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 90925fe07e02b066f84a9c9315eb0f837907bb46..85eb94368a9121a073c099b57e9064a7b68d9ee3 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
@@ -77,6 +77,7 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC
 	private FormLink groupAssessmentButton;
 	
 	private GroupAssessmentController assessmentCtrl;
+	private BulkAssessmentToolController bulkAssessmentToolCtrl;
 	
 	@Autowired
 	private GTAManager gtaManager;
@@ -136,10 +137,12 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC
 	}
 	
 	private void initBulkAsssessmentTool(UserRequest ureq, FormLayoutContainer formLayout) {
-		BulkAssessmentToolController bulkAssessmentTollCtrl = new BulkAssessmentToolController(ureq, getWindowControl(),
+		removeAsListenerAndDispose(bulkAssessmentToolCtrl);
+		
+		bulkAssessmentToolCtrl = new BulkAssessmentToolController(ureq, getWindowControl(),
 				getCourseEnvironment(), (AssessableCourseNode)courseNode);
-		listenTo(bulkAssessmentTollCtrl);
-		formLayout.put("bulk.assessment", bulkAssessmentTollCtrl.getInitialComponent());	
+		listenTo(bulkAssessmentToolCtrl);
+		formLayout.put("bulk.assessment", bulkAssessmentToolCtrl.getInitialComponent());	
 	}
 
 	@Override
@@ -181,6 +184,11 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC
 			}
 			cmc.deactivate();
 			cleanUp();
+		} else if(bulkAssessmentToolCtrl == source) {
+			if(event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) {
+				loadModel(ureq);
+			}
+			cleanUp();
 		}
 		super.event(ureq, source, event);
 	}
@@ -198,7 +206,9 @@ public class GTAIdentityListCourseNodeController extends IdentityListCourseNodeC
 
 	@Override
 	protected void cleanUp() {
+		removeAsListenerAndDispose(bulkAssessmentToolCtrl);
 		removeAsListenerAndDispose(assessmentCtrl);
+		bulkAssessmentToolCtrl = null;
 		assessmentCtrl = null;
 		super.cleanUp();
 	}
diff --git a/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java b/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java
index ec7749dd9684146094486092f2929e00ca302974..1df05a2f87fc1eecff5686fa99c4f2a5495b4719 100644
--- a/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java
+++ b/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java
@@ -31,12 +31,27 @@ import org.junit.Test;
 public class TextModeTest {
 	
 	@Test
-	public void guessOneLine() {
-		TextMode mode1 = TextMode.guess("bla bla");
+	public void textModeOneLine_text() {
+		String text = "bla bla";
+		TextMode mode1 = TextMode.guess(text);
 		Assert.assertEquals(TextMode.oneLine, mode1);
 		
-		TextMode mode2 = TextMode.guess("<p>bla bla</p>");
+		String fromOneLine = TextMode.fromOneLine(text);
+		Assert.assertEquals("<p>bla bla</p>", fromOneLine);
+
+		String toOneLine = TextMode.toOneLine(text);
+		Assert.assertEquals("bla bla", toOneLine);
+	}
+	
+	@Test
+	public void textModeOneLine_paragraph() {
+		String paragraph = "<p>bla bla</p>"; 
+		
+		TextMode mode2 = TextMode.guess("paragraph");
 		Assert.assertEquals(TextMode.oneLine, mode2);
+
+		String toOneLine = TextMode.toOneLine(paragraph);
+		Assert.assertEquals("bla bla", toOneLine);
 	}
 	
 	@Test