diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java
index e87e730e2c49c4457e4aba0f857da415fc3c83d9..e04c05cecd0e56ca117cf7171c936fc6ed910c9b 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/TextBoxListElementImpl.java
@@ -76,9 +76,7 @@ public class TextBoxListElementImpl extends AbstractTextElement implements TextB
 		} else {
 			//this one handle multipart/form too
 			String submitValue = getRootForm().getRequestParameter(inputId);
-			if(StringHelper.containsNonWhitespace(submitValue)) {
-				component.setCmd(ureq, submitValue);
-			}	
+			component.setCmd(ureq, submitValue);
 		}			
 	}
 
diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java
index 9b47bca26fb34f96e8a42ee14a3b48fce84b9b84..cc7919b14d3471040279983014701ea0ad24b487 100644
--- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java
+++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListComponent.java
@@ -153,9 +153,10 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 	}
 	
 	public void setCmd(UserRequest ureq, String cmd) {
-		if(!StringHelper.containsNonWhitespace(cmd)) {
+		if(cmd == null) {
 			return;
 		}
+		// empty string is ok = empty text box
 		
 		String[] splitted = cmd.split(",");
 		List<String> cleanedItemValues = new ArrayList<String>();
@@ -434,12 +435,13 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 	}
 
 	/**
-	 * returns a the initialItems as comma-separated list.<br />
+	 * returns a the current items as comma-separated list.<br />
 	 * 
 	 * @return An HTML escaped list of item
 	 */
-	protected String getInitialItemsAsString() {
-		Map<String, String> content = getInitialItems();
+	protected String getItemsAsString() {
+		Map<String, String> content = getCurrentItems();
+		
 		if (content != null && content.size() != 0) {
 			//antisamy + escaping to prevent issue with the javascript code
 			OWASPAntiSamyXSSFilter filter = new OWASPAntiSamyXSSFilter();
diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java
index 97cc01b4979791c8418fa3867143106ddf2acf07..f98e9376255362517c363c62736d4b9e59c035fa 100644
--- a/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/textboxlist/TextBoxListRenderer.java
@@ -30,6 +30,8 @@ import org.olat.core.gui.render.Renderer;
 import org.olat.core.gui.render.StringOutput;
 import org.olat.core.gui.render.URLBuilder;
 import org.olat.core.gui.translator.Translator;
+import org.olat.core.util.Formatter;
+import org.olat.core.util.Util;
 
 /**
  * Description:<br>
@@ -57,7 +59,7 @@ public class TextBoxListRenderer extends DefaultComponentRenderer {
 
 		TextBoxListComponent tblComponent = (TextBoxListElementComponent) source;
 		if (tblComponent.isEnabled()) {
-			renderEnabledMode(tblComponent, sb);
+			renderEnabledMode(tblComponent, sb, translator);
 		} else {
 			renderDisabledMode(tblComponent, sb);
 		}
@@ -72,18 +74,20 @@ public class TextBoxListRenderer extends DefaultComponentRenderer {
 	 *            the StringOutput
 	 * @param translator
 	 */
-	private void renderEnabledMode(TextBoxListComponent tblComponent, StringOutput sb) {
+	private void renderEnabledMode(TextBoxListComponent tblComponent, StringOutput sb, Translator translator) {
 		TextBoxListElementImpl te = ((TextBoxListElementComponent)tblComponent).getTextElementImpl();
 		Form rootForm = te.getRootForm();
 		String dispatchId = tblComponent.getFormDispatchId();
-		String initialValue = tblComponent.getInitialItemsAsString();
+		String initialValue = tblComponent.getItemsAsString();
 
 		sb.append("<input type='text' id='textboxlistinput").append(dispatchId).append("'")
 		  .append(" name='textboxlistinput").append(dispatchId).append("'");
 		if (te.hasFocus()) {
 			sb.append(" autofocus");
 		}
-		sb.append(" value='").append(initialValue).append("' />\n");
+		sb.append(" value='").append(initialValue).append("'");
+		Translator myTrans = Util.createPackageTranslator(this.getClass(), translator.getLocale());
+		sb.append(" placeholder='").append(Formatter.escapeDoubleQuotes(myTrans.translate("add.enter"))).append("' class='o_textbox'/>\n");
 
 		String o_ffEvent = FormJSHelper.getJSFnCallFor(rootForm, dispatchId, 2);
 		// generate the JS-code for the bootstrap tagsinput
@@ -116,11 +120,13 @@ public class TextBoxListRenderer extends DefaultComponentRenderer {
 	private void renderDisabledMode(TextBoxListComponent tblComponent, StringOutput output) {
 		// read only view, we just display the initialItems as
 		// comma-separated string
-		String readOnlyContent = tblComponent.getInitialItemsAsString();
+		String readOnlyContent = tblComponent.getItemsAsString();
 		if (readOnlyContent.length() > 0) {
-			output.append("<div><i class='o_icon o_icon_tags'> </i> ")
-			      .append(readOnlyContent)
-			      .append("</div>");
+			output.append("<span class='o_textbox_disabled'><i class='o_icon o_icon_tags'> </i> ");
+			for (String item : readOnlyContent.split(",")) {
+				output.append("<span class='tag label label-info'>").append(item.trim()).append("</span>");								
+			}
+			output.append("</span>");
 		} else {
 			output.append("-");
 		}
diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties
index 26a2de17429b57e840ada3623aeaae03bd2d403f..46a6d684d4ce87e1443a1857da1c80eb33b08396 100644
--- a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_de.properties
@@ -2,3 +2,4 @@ add.new.element.prefix=Hinzuf\u00fcgen
 please.wait.searching=Bitte warten. Suche nach: 
 more.results.found.specify.search=Es wurden noch weitere Resultate gefunden, bitte Suche verfeinern.
 default.input.hint=Klicken Sie hier, um ein Element hinzuzuf\u00fcgen. Mehrere Elemente k\u00f6nnen mit Komma getrennt werden.
+add.enter=Eingabe mit \u23CE abschliessen
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties
index 6b01f8f346cef0f37b83a197308d53aad679375a..fb0744da518fb873cd240d703ce86f5dadda33df 100644
--- a/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/gui/components/textboxlist/_i18n/LocalStrings_en.properties
@@ -3,3 +3,4 @@ add.new.element.prefix=Add
 default.input.hint=Click here to add an element. Several elements can be separated by commas.
 more.results.found.specify.search=More search results found. Please refine your search.
 please.wait.searching=Please be patient. Searching for\:
+add.enter=Terminate input with \u23CE
\ No newline at end of file