diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java
index 1c9364342305705b9866e4a0ac8429c57455a072..f38e2b27c19eaef576363cdf66cb3ff6ff9f5a5e 100644
--- a/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java
+++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManageCheckpointsController.java
@@ -249,7 +249,9 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		}
 
 		int j = 500;
-		for( Checkpoint checkpoint : checklist.getCheckpoints() ) {
+
+		List<Checkpoint> checkpointList = checklist.getCheckpointsSorted(ChecklistUIFactory.comparatorTitleAsc);
+		for( Checkpoint checkpoint : checkpointList ) {
 			String pointTitle = checkpoint.getTitle() == null ? "" : checkpoint.getTitle();
 			manageChecklistTable.addColumnDescriptor(new ChecklistMultiSelectColumnDescriptor(pointTitle, j++));
 			cols++;
@@ -258,14 +260,15 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		cols++;
 		
 		manageChecklistTable.setMultiSelect(false);
-		manageTableData = new ChecklistManageTableDataModel(checklist, lstIdents, userPropertyHandlers, cols);
+		manageTableData = new ChecklistManageTableDataModel(checkpointList, lstIdents, userPropertyHandlers, cols);
 		manageChecklistTable.setTableDataModel(manageTableData);
 		
 		panel.setContent(manageChecklistTable.getInitialComponent());
 	}
 	
 	private void initEditTable(UserRequest ureq, Identity identity) {
-		editTableData = new ChecklistRunTableDataModel(this.checklist.getCheckpoints(), getTranslator());
+		List<Checkpoint> checkpoints = checklist.getCheckpoints();
+		editTableData = new ChecklistRunTableDataModel(checkpoints, getTranslator());
 		
 		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
 		tableConfig.setTableEmptyMessage(translate("cl.table.empty"));
@@ -285,8 +288,8 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		editChecklistTable.addMultiSelectAction("cl.save.close", "save");
 		editChecklistTable.setTableDataModel(editTableData);
 		
-		for(int i = 0; i < this.checklist.getCheckpoints().size(); i++) {
-			Checkpoint checkpoint = (Checkpoint) editTableData.getObject(i);
+		for(int i = 0; i<checkpoints.size(); i++) {
+			Checkpoint checkpoint = editTableData.getObject(i);
 			boolean selected = checkpoint.getSelectionFor(identity).booleanValue();
 			editChecklistTable.setMultiSelectSelectedAt(i, selected);
 		}
@@ -300,7 +303,7 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		ChecklistManager manager = ChecklistManager.getInstance();
 		int size = checklist.getCheckpoints().size();
 		for(int i = 0; i < size; i++) {
-			Checkpoint checkpoint = this.checklist.getCheckpoints().get(i);
+			Checkpoint checkpoint = checklist.getCheckpoints().get(i);
 			Boolean selected = checkpoint.getSelectionFor(identity);
 			if(selected.booleanValue() != selection.get(i)) {
 				checkpoint.setSelectionFor(identity, selection.get(i));
@@ -313,8 +316,10 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		int cdcnt = manageTableData.getColumnCount();
 		int rcnt = manageTableData.getRowCount();
 		StringBuilder sb = new StringBuilder();
+		boolean isAdministrativeUser = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		List<UserPropertyHandler> userPropertyHandlers = userManager.getUserPropertyHandlersFor(USER_PROPS_ID, isAdministrativeUser);
 		// additional informations
-		sb.append(translate("cl.course.title")).append('\t').append(this.course.getCourseTitle());
+		sb.append(translate("cl.course.title")).append('\t').append(course.getCourseTitle());
 		sb.append('\n');
 		String listTitle = checklist.getTitle() == null ? "" : checklist.getTitle();
 		sb.append(translate("cl.title")).append('\t').append(listTitle);
@@ -328,7 +333,14 @@ public class ChecklistManageCheckpointsController extends BasicController {
 		}
 		sb.append('\n');
 		// checkpoint description
-		sb.append('\t');
+		if(isAdministrativeUser) {
+			sb.append('\t');
+		}
+		for (UserPropertyHandler userPropertyHandler : userPropertyHandlers) {
+			if (userPropertyHandler == null) continue;
+			sb.append('\t');
+		}
+
 		for (Checkpoint checkpoint : checklist.getCheckpoints()) {
 			sb.append('\t').append(checkpoint.getDescription());
 		}
diff --git a/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java b/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java
index 09b51054fb2a08c55d5d49deacd180642704aa45..7ea3c1db7d6cee965a76d542f73592675274076b 100644
--- a/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java
+++ b/src/main/java/de/bps/olat/modules/cl/ChecklistManageTableDataModel.java
@@ -35,7 +35,7 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> {
 	private int colCount;
 	private int rowCount;
 
-	public ChecklistManageTableDataModel(Checklist checklist, List<Identity> participants,
+	public ChecklistManageTableDataModel(List<Checkpoint> checkpointList, List<Identity> participants,
 			List<UserPropertyHandler> userPropertyHandlers, int cols) {
 		super(Collections.<Row>emptyList());
 		
@@ -44,7 +44,7 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> {
 		
 		List<Row> entries = new ArrayList<>(rowCount);
 		for( Identity identity : participants ) {
-			entries.add(new Row(identity, userPropertyHandlers, checklist, Locale.ENGLISH));
+			entries.add(new Row(identity, userPropertyHandlers, checkpointList, Locale.ENGLISH));
 		}
 		setObjects(entries);
 	}
@@ -86,7 +86,7 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> {
 		private final String[] identityProps;
 		private final Boolean[] checkpoints;
 		
-		public Row(Identity identity, List<UserPropertyHandler> userPropertyHandlers, Checklist checklist, Locale locale) {
+		public Row(Identity identity, List<UserPropertyHandler> userPropertyHandlers, List<Checkpoint> checkpointList, Locale locale) {
 			this.identityKey = identity.getKey();
 			this.identityName = identity.getName();
 			
@@ -95,7 +95,6 @@ public class ChecklistManageTableDataModel extends DefaultTableDataModel<Row> {
 				identityProps[i] = userPropertyHandlers.get(i).getUserProperty(identity.getUser(), locale);
 			}
 			
-			List<Checkpoint> checkpointList = checklist.getCheckpointsSorted(ChecklistUIFactory.comparatorTitleAsc);
 			checkpoints = new Boolean[checkpointList.size()];
 			for( int i=checkpointList.size(); i-->0; ) {
 				checkpoints[i] =  checkpointList.get(i).getSelectionFor(identity);
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 958c410c9897f0962aad0918820545614de76659..e50254d3be64d646fa4c7bad6092d320786825c0 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
@@ -89,7 +89,7 @@ public class TextBoxListElementImpl extends AbstractTextElement implements TextB
 	@Override
 	public String getValue(){
 	//	String paramVal = getRootForm().getRequestParameter("textboxlistinput" + getFormDispatchId());
-		return StringUtils.join(this.component.getCurrentItemValues(),", ");
+		return StringUtils.join(component.getCurrentItemValues(),", ");
 	}
 
 	@Override
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 f8d3bef7b548fbf0a5100714db1de5a2794d6075..214de503c04b2dce5a3dd191e8ad66af34eae835 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
@@ -215,11 +215,14 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 	 */
 	private String getAutoCompletionItemCaptionByValue(String itemValue) {
 		String autoCompletionItemCaption = "";
-		if (this.getAutoCompleteContent() == null)
+		Map<String,String> content = getAutoCompleteContent();
+		if (content == null) {
 			return autoCompletionItemCaption;
-		for (Entry<String, String> autoCompletionItemEntry : this.getAutoCompleteContent().entrySet()) {
-			if (autoCompletionItemEntry.getValue().equals(itemValue))
+		}
+		for (Entry<String, String> autoCompletionItemEntry : content.entrySet()) {
+			if (autoCompletionItemEntry.getValue().equals(itemValue)) {
 				autoCompletionItemCaption = autoCompletionItemEntry.getKey();
+			}
 		}
 		return autoCompletionItemCaption;
 	}
@@ -442,7 +445,9 @@ public abstract class TextBoxListComponent extends FormBaseComponentImpl {
 			List<String> filtered = new ArrayList<String>();
 			for(String item:content.keySet()) {
 				String antiItem = filter.filter(item);
-				filtered.add(StringHelper.escapeHtml(antiItem));
+				if(StringHelper.containsNonWhitespace(antiItem)) {
+					filtered.add(antiItem);
+				}
 			}
 			return StringUtils.join(filtered, ", ");
 		} else
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 29530308a021666b2df2ba69f2494d36e40efb2f..c66c32df486ee58b1c90b34dc2a94f8aad640b09 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
@@ -102,10 +102,11 @@ public class TextBoxListRenderer implements ComponentRenderer {
 		TextBoxListElementImpl te = ((TextBoxListElementComponent)tblComponent).getTextElementImpl();
 		Form rootForm = te.getRootForm();
 		String dispatchId = tblComponent.getFormDispatchId();
+		String initialValue = tblComponent.getInitialItemsAsString();
 
 		output.append("<input type=\"text\" id=\"textboxlistinput").append(dispatchId).append("\" ")
 		      .append("name='textboxlistinput").append(dispatchId).append("' ")
-		      .append("value='").append(tblComponent.getInitialItemsAsString()).append("'")
+		      .append("value='").append(initialValue).append("'")
 		      .append("/>\n");
 
 		// OO-137 : here, we display the currentItems. (at first render, this is equal to initialItems)
diff --git a/src/main/java/org/olat/instantMessaging/ui/ChatController.java b/src/main/java/org/olat/instantMessaging/ui/ChatController.java
index 5c86bba4d65bc6ce6ba4b0cf192478c674d99e7b..45c2dbee7586143947d3571f5163ae4a830cd7e4 100644
--- a/src/main/java/org/olat/instantMessaging/ui/ChatController.java
+++ b/src/main/java/org/olat/instantMessaging/ui/ChatController.java
@@ -85,6 +85,7 @@ public class ChatController extends BasicController implements GenericEventListe
 	private JSAndCSSComponent jsc;
 	private FloatingResizableDialogController chatPanelCtr;
 	
+	private Date today;
 	private List<String> allChats;
 	private final Formatter formatter;
 
@@ -109,6 +110,7 @@ public class ChatController extends BasicController implements GenericEventListe
 		this.ores = ores;
 		this.privateReceiverKey = privateReceiverKey;
 		this.vip = vip;
+		setToday();
 
 		avatarBaseURL = registerCacheableMapper(ureq, "avatars-members", new AvatarMapper());
 		
@@ -193,6 +195,15 @@ public class ChatController extends BasicController implements GenericEventListe
 		}
 	}
 	
+	private void setToday() {
+		Calendar cal = Calendar.getInstance();
+		cal.set(Calendar.HOUR_OF_DAY, 0);
+		cal.set(Calendar.MINUTE, 0);
+		cal.set(Calendar.SECOND, 0);
+		cal.set(Calendar.MILLISECOND, 0);
+		today = cal.getTime();
+	}
+	
 	private Date getYesterday() {
 		Calendar cal = Calendar.getInstance();
 		cal.add(Calendar.DATE, -1);
@@ -254,6 +265,7 @@ public class ChatController extends BasicController implements GenericEventListe
 	}
 	
 	private void loadModel(Date from, int maxResults) {
+		setToday();
 		messageHistory.clear();
 		List<InstantMessage> lastMessages = imService.getMessages(getIdentity(), getOlatResourceable(), from, 0, maxResults, true);
 		for(int i=lastMessages.size(); i-->0; ) {
@@ -322,7 +334,15 @@ public class ChatController extends BasicController implements GenericEventListe
 		
 		String m = message.getBody().replaceAll("<br/>\n", "\r\n");
 		m = prepareMsgBody(m.replaceAll("<", "&lt;").replaceAll(">", "&gt;")).replaceAll("\r\n", "<br/>\n");
-		String creationDate = formatter.formatTime(message.getCreationDate());
+		
+		Date msgDate = message.getCreationDate();
+		String creationDate;
+		if(today.compareTo(msgDate) < 0) {
+			creationDate = formatter.formatTime(message.getCreationDate());
+		} else {
+			creationDate = formatter.formatDateAndTime(message.getCreationDate());
+		}
+
 		String from = message.getFromNickName();
 		
 		synchronized (messageHistory) {
diff --git a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java
index 9aae9a47071145a90a757d20ebc34c3e021bd08c..02793e274f037a43f782efe4af37f4a4dcbee996 100755
--- a/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java
+++ b/src/main/java/org/olat/portfolio/ui/EPArtefactPoolRunController.java
@@ -262,6 +262,7 @@ public class EPArtefactPoolRunController extends BasicController implements Acti
 			// some artefacts were added, refresh view
 			if (event.equals(Event.DONE_EVENT)) {
 				initTPAllView(ureq);
+				fireEvent(ureq, event);
 			}
 		} else if (event instanceof EPArtefactChoosenEvent) {
 			// an artefact was choosen, pass through the event until top
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
index 6945b4d9a2c1f9aebeb92a870a52986866dfa4f3..965f3b87a1a752af046f1f6884b459b8f91df321 100644
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
+++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/EPArtefactViewController.java
@@ -26,7 +26,6 @@ package org.olat.portfolio.ui.artefacts.view;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -65,6 +64,7 @@ import org.olat.portfolio.model.structel.PortfolioStructure;
 import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm00;
 import org.olat.portfolio.ui.artefacts.collect.EPCollectStepForm03;
 import org.olat.portfolio.ui.artefacts.collect.EPReflexionChangeEvent;
+import org.olat.resource.OLATResource;
 import org.olat.util.logging.activity.LoggingResourceable;
 
 /**
@@ -203,20 +203,15 @@ public class EPArtefactViewController extends FormBasicController {
 		// get maps wherein this artefact is linked and create links to them
 		List<PortfolioStructure> linkedMaps = ePFMgr.getReferencedMapsForArtefact(artefact);
 		if (linkedMaps != null && linkedMaps.size() != 0) {
-			StringBuilder buf = new StringBuilder();
-			for (Iterator<PortfolioStructure> iterator = linkedMaps.iterator(); iterator.hasNext();) {
-				PortfolioStructure ePMap = iterator.next();
-				if (viewOnlyMode || artefactChooseMode){
-					StringHelper.escapeHtml(ePMap.getTitle());
-					buf.append(", ");
-				} else {
-					buf.append("<a href=\"").append(createLinkToMap(ePMap)).append("\">");
-					StringHelper.escapeHtml(ePMap.getTitle());
-					buf.append("</a>, ");
-				}
+			List<FormLink> selectMapNames = new ArrayList<FormLink>(linkedMaps.size());
+			for (PortfolioStructure ePMap : linkedMaps) {
+				String title = StringHelper.escapeHtml(ePMap.getTitle());
+				FormLink selectMap = uifactory.addFormLink("map", "map", title, null, formLayout, Link.NONTRANSLATED);
+				selectMap.setUserObject(ePMap.getOlatResource());
+				selectMap.setEnabled(!viewOnlyMode && !artefactChooseMode);
+				selectMapNames.add(selectMap);
 			}
-			String mapLinks = buf.toString();
-			flc.contextPut("maps", mapLinks.substring(0, mapLinks.length() - 2));
+			flc.contextPut("maps", selectMapNames);
 		}
 
 		// build link to original source
@@ -276,13 +271,10 @@ public class EPArtefactViewController extends FormBasicController {
 		flc.contextPut("artAttribConfig", attribConfig);
 	}
 
-	private String createLinkToMap(PortfolioStructure ePMap) {
-		BusinessControlFactory bCF = BusinessControlFactory.getInstance();
-		ContextEntry mapCE = bCF.createContextEntry(ePMap.getOlatResource());
-		ArrayList<ContextEntry> cEList = new ArrayList<ContextEntry>();
-		cEList.add(mapCE);
-		String busLink = bCF.getAsURIString(cEList, true); 
-		return busLink;
+	private void doOpenLinkToMap(UserRequest ureq, OLATResource mapResource) {
+		String businessPath = "[" + mapResource.getResourceableTypeName() + ":"
+				+ mapResource.getResourceableId() + "]";
+		NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
 	}
 
 	private String createLinkToArtefactSource(UserRequest ureq, String businessPath){
@@ -317,6 +309,12 @@ public class EPArtefactViewController extends FormBasicController {
 		} else if(source == tblE){
 			List<String> actualTags = tblE.getValueList();
 			ePFMgr.setArtefactTags(getIdentity(), artefact, actualTags);
+		} else if(source instanceof FormLink) {
+			FormLink link = (FormLink)source;
+			if("map".equals(link.getCmd())) {
+				OLATResource map = (OLATResource)link.getUserObject();
+				doOpenLinkToMap(ureq, map);
+			}
 		}
 	}
 	
diff --git a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html
index 3529f592a300866fb35181be6d593a185142b79a..83b5dfa21db57321c7c1a7bd60efdbc21f9a5fa5 100644
--- a/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html
+++ b/src/main/java/org/olat/portfolio/ui/artefacts/view/_content/singleArtefact.html
@@ -59,7 +59,11 @@
 	#if ($artAttribConfig.get("artefact.used.in.maps"))
 	<div class="b_form_element_wrapper b_clearfix">
 		<div class="b_form_element_label">$r.translate("artefact.used.in.maps")</div>
-		<div class="b_form_element">$!maps</div>
+		<div class="b_form_element">
+			#foreach($map in $maps)
+				$r.render($map.component.componentName)
+			#end
+		</div>
 	</div>
 	#end
 	#if ($artAttribConfig.get("artefact.reflexion"))
diff --git a/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java b/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java
index 3a8a3f1a381caa479406f8f5f75f4e74da861e61..57429a2c48e6e7c8108f1248fb354bac0b30e976 100644
--- a/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java
+++ b/src/main/java/org/olat/portfolio/ui/structel/EPAddElementsController.java
@@ -133,28 +133,32 @@ public class EPAddElementsController extends BasicController {
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
 		super.event(ureq, source, event);
-		if (source == artefactPoolCtrl && event instanceof EPArtefactChoosenEvent) {
-			// finally an artefact was choosen
-			EPArtefactChoosenEvent artCEv = (EPArtefactChoosenEvent) event;
-			artefactBox.deactivate();
-			AbstractArtefact choosenArtefact = artCEv.getArtefact();
-			// check for a yet existing link to this artefact
-			if (ePFMgr.isArtefactInStructure(choosenArtefact, portfolioStructure)) {
-				showWarning("artefact.already.in.structure");
-			} else {
-				boolean successfullLink = ePFMgr.addArtefactToStructure(getIdentity(), choosenArtefact, portfolioStructure);
-				if (successfullLink) {
-					getWindowControl().setInfo(
-							getTranslator().translate("artefact.choosen", new String[] { choosenArtefact.getTitle(), portfolioStructure.getTitle() }));
-					ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(choosenArtefact));
-					ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_SELECTED, getClass());
+		if (source == artefactPoolCtrl) {
+			if(event instanceof EPArtefactChoosenEvent) {
+				// finally an artefact was choosen
+				EPArtefactChoosenEvent artCEv = (EPArtefactChoosenEvent) event;
+				artefactBox.deactivate();
+				AbstractArtefact choosenArtefact = artCEv.getArtefact();
+				// check for a yet existing link to this artefact
+				if (ePFMgr.isArtefactInStructure(choosenArtefact, portfolioStructure)) {
+					showWarning("artefact.already.in.structure");
 				} else {
-					showError("restrictions.not.conform");
+					boolean successfullLink = ePFMgr.addArtefactToStructure(getIdentity(), choosenArtefact, portfolioStructure);
+					if (successfullLink) {
+						getWindowControl().setInfo(
+								getTranslator().translate("artefact.choosen", new String[] { choosenArtefact.getTitle(), portfolioStructure.getTitle() }));
+						ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapPortfolioOres(choosenArtefact));
+						ThreadLocalUserActivityLogger.log(EPLoggingAction.EPORTFOLIO_ARTEFACT_SELECTED, getClass());
+					} else {
+						showError("restrictions.not.conform");
+					}
+					fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, portfolioStructure));
 				}
+			} else if(event == Event.DONE_EVENT) {
+				artefactBox.deactivate();
 				fireEvent(ureq, new EPStructureChangeEvent(EPStructureChangeEvent.ADDED, portfolioStructure));
 			}
-
-		}
+		} 
 	}
 
 	public void setShowLink(String... types) {