diff --git a/src/main/java/org/olat/course/nodes/FOCourseNode.java b/src/main/java/org/olat/course/nodes/FOCourseNode.java
index b071e6471cbd6360e117c9976c8032165b662cc4..dc5a3cda97d3f4d55db9f2428df1a09a3cbbbf31 100644
--- a/src/main/java/org/olat/course/nodes/FOCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/FOCourseNode.java
@@ -241,7 +241,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		if (ne.isAtLeastOneAccessible()) {
 			// Create a forum peekview controller that shows the latest two messages		
 			Forum theForum = loadOrCreateForum(userCourseEnv.getCourseEnvironment());
-			Controller peekViewController = new FOPeekviewController(ureq, wControl, theForum, getIdent(), 2);
+			Controller peekViewController = new FOPeekviewController(ureq, wControl, theForum, getIdent(), 3);
 			return peekViewController;			
 		} else {
 			// use standard peekview
@@ -336,8 +336,7 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	public StatusDescription[] isConfigValid(CourseEditorEnv cev) {
 		oneClickStatusCache = null;
 		//only here we know which translator to take for translating condition error messages
-		String translatorStr = Util.getPackageName(FOCourseNodeEditController.class);
-		List<StatusDescription> sds = isConfigValidWithTranslator(cev, translatorStr,getConditionExpressions());
+		List<StatusDescription> sds = isConfigValidWithTranslator(cev, PACKAGE_FO, getConditionExpressions());
 		oneClickStatusCache = StatusDescriptionHelper.sort(sds);
 		return oneClickStatusCache;
 	}
diff --git a/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java b/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java
index 7f40f4c52f85867e6a1ce9f0983b9ce98be19b13..8048ec8b2b373ce590f80274d28a7c93d40693fb 100644
--- a/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java
+++ b/src/main/java/org/olat/course/nodes/fo/FOPeekviewController.java
@@ -19,8 +19,11 @@
  */
 package org.olat.course.nodes.fo;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
+import org.apache.commons.lang.StringEscapeUtils;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.htmlsite.OlatCmdEvent;
@@ -34,9 +37,12 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
+import org.olat.core.util.filter.FilterFactory;
 import org.olat.modules.fo.Forum;
 import org.olat.modules.fo.ForumManager;
 import org.olat.modules.fo.Message;
+import org.olat.user.UserManager;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * <h3>Description:</h3> The forum peekview controller displays the configurable
@@ -54,6 +60,11 @@ import org.olat.modules.fo.Message;
 public class FOPeekviewController extends BasicController implements Controller {
 	// the current course node id
 	private final String nodeId;
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private ForumManager forumManager;
 
 	/**
 	 * Constructor
@@ -70,9 +81,9 @@ public class FOPeekviewController extends BasicController implements Controller
 	
 		VelocityContainer peekviewVC = createVelocityContainer("peekview");
 		// add items, only as many as configured
-		ForumManager foMgr = ForumManager.getInstance();
-		List<Message> messages = foMgr.getMessagesByForumID(forum.getKey(), 0, itemsToDisplay, Message.OrderBy.creationDate, false);
+		List<Message> messages = forumManager.getMessagesByForumID(forum.getKey(), 0, itemsToDisplay, Message.OrderBy.creationDate, false);
 		// only take the configured amount of messages
+		List<MessageView> views = new ArrayList<MessageView>(itemsToDisplay);
 		for (Message message :messages) {
 			// add link to item
 			// Add link to jump to course node
@@ -80,17 +91,32 @@ public class FOPeekviewController extends BasicController implements Controller
 			nodeLink.setCustomDisplayText(StringHelper.escapeHtml(message.getTitle()));
 			nodeLink.setIconLeftCSS("o_icon o_icon_post");
 			nodeLink.setCustomEnabledLinkCSS("o_gotoNode");
-			nodeLink.setUserObject(Long.toString(message.getKey()));				
+			nodeLink.setUserObject(message.getKey());	
+			
+			String creator = userManager.getUserDisplayName(message.getCreator());
+			String body = message.getBody();
+			if(body.length() > 256) {
+				String truncateBody = FilterFactory.getHtmlTagsFilter().filter(body);
+				truncateBody = StringEscapeUtils.unescapeHtml(truncateBody);// remove entities
+				if(truncateBody.length() < 256) {
+					body = StringHelper.xssScan(body);
+				} else {
+					truncateBody = Formatter.truncate(truncateBody, 256);// truncate
+					body = StringHelper.escapeHtml(truncateBody);//ok because html tags are filtered
+				}
+			} else {
+				body = StringHelper.xssScan(body);
+			}
+			views.add(new MessageView(message.getKey(), message.getCreationDate(), creator, body));
 		}
-		peekviewVC.contextPut("messages", messages);
+		peekviewVC.contextPut("messages", views);
 		// Add link to show all items (go to node)
 		Link allItemsLink = LinkFactory.createLink("peekview.allItemsLink", peekviewVC, this);
 		allItemsLink.setIconRightCSS("o_icon o_icon_start");
 		allItemsLink.setCustomEnabledLinkCSS("pull-right");
 		// Add Formatter for proper date formatting
 		peekviewVC.contextPut("formatter", Formatter.getInstance(getLocale()));
-		//
-		this.putInitialPanel(peekviewVC);
+		putInitialPanel(peekviewVC);
 	}
 
 	/**
@@ -100,7 +126,7 @@ public class FOPeekviewController extends BasicController implements Controller
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source instanceof Link) {
 			Link nodeLink = (Link) source;
-			String messageId = (String) nodeLink.getUserObject();
+			Object messageId = nodeLink.getUserObject();
 			if (messageId == null) {
 				fireEvent(ureq, new OlatCmdEvent(OlatCmdEvent.GOTONODE_CMD, nodeId));								
 			} else {
@@ -116,5 +142,35 @@ public class FOPeekviewController extends BasicController implements Controller
 	protected void doDispose() {
 		// nothing to dispose
 	}
+	
+	public static class MessageView {
+		
+		private final Long key;
+		private final String body;
+		private final Date creationDate;
+		private final String creatorFullname;
+		
+		public MessageView(Long key, Date creationDate, String creatorFullname, String body) {
+			this.key = key;
+			this.body = body;
+			this.creationDate = creationDate;
+			this.creatorFullname = creatorFullname;
+		}
+		
+		public Long getKey() {
+			return key;
+		}
+		
+		public Date getCreationDate() {
+			return creationDate;
+		}
+
+		public String getCreatorFullname() {
+			return creatorFullname;
+		}
 
-}
+		public String getBody() {
+			return body;
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/fo/_content/peekview.html b/src/main/java/org/olat/course/nodes/fo/_content/peekview.html
index 75cd5c374a073fd07d93e8f83d99ac580029433d..d38605e0acf4ed6000a650c0936608a40d51bd0a 100644
--- a/src/main/java/org/olat/course/nodes/fo/_content/peekview.html
+++ b/src/main/java/org/olat/course/nodes/fo/_content/peekview.html
@@ -4,9 +4,8 @@
 		<h5>
 			$r.render("nodeLink_${message.getKey()}")
 			<small class="o_nowrap">
-				#set($user=$message.getCreator().getUser())
-				$r.escapeHtml($user.getProperty("firstName", null)) $r.escapeHtml($user.getProperty("lastName", null))
-				($formatter.formatDateAndTime($message.getCreationDate()))
+				$r.escapeHtml($message.creator)
+				$formatter.formatDateAndTime($message.getCreationDate())
 			</small>
 		</h5>
 		<div>
diff --git a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
index 26232e480a405ec8f7c8a8bdc8ed258da79d3026..930a93166a74621b775039b0115d081c1d96554e 100644
--- a/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
+++ b/src/main/java/org/olat/group/manager/BusinessGroupServiceImpl.java
@@ -1525,7 +1525,7 @@ public class BusinessGroupServiceImpl implements BusinessGroupService, UserDataD
 			for(RepositoryEntry re:resources) {
 				boolean found = false;
 				for(RepositoryEntryToGroupRelation relation:relations) {
-					if(relation.getGroup().equals(group) && relation.getEntry().equals(re)) {
+					if(relation.getGroup().equals(baseGroup) && relation.getEntry().equals(re)) {
 						found = true;
 					}
 				}
diff --git a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
index 861bf8beb8f7c7e635b139c96703b1f120aa0f89..26427307a711bf7331e7cc0142de12b922b36527 100644
--- a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
+++ b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
@@ -128,13 +128,12 @@ public class CreateRepositoryEntryController extends FormBasicController {
 	protected boolean validateFormLogic(UserRequest ureq) {
 		boolean allOk = true;
 		
+		displaynameEl.clearError();
 		if (!StringHelper.containsNonWhitespace(displaynameEl.getValue())) {
 			displaynameEl.setErrorKey("cif.error.displayname.empty", new String[] {});
-			allOk = false;
+			allOk &= false;
 		} else if (displaynameEl.hasError()) {
-			allOk = false;
-		} else {
-			displaynameEl.clearError();
+			allOk &= false;
 		}
 		
 		return allOk & super.validateFormLogic(ureq);
diff --git a/src/main/resources/database/mysql/alter_10_3_2_to_10_3_3.sql b/src/main/resources/database/mysql/alter_10_3_2_to_10_3_3.sql
index 2e972fb1f05e37c4c88d9b4c426ad5a60337d62c..17d5e2eca76c46c7eaa722265c3f4e3b3dbc9e46 100644
--- a/src/main/resources/database/mysql/alter_10_3_2_to_10_3_3.sql
+++ b/src/main/resources/database/mysql/alter_10_3_2_to_10_3_3.sql
@@ -1 +1,3 @@
-alter table o_ac_offer add column autobooking boolean default 0;
\ No newline at end of file
+alter table o_ac_offer add column autobooking boolean default 0;
+
+create index idx_mail_meta_id_idx on o_mail (meta_mail_id);
\ No newline at end of file
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 5dbe58990df2a9a0a5b1dc80c886e4f13c29f09c..9b8c5e37100e8fec48dbdf462f9da10d2cd21fbe 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -2022,6 +2022,7 @@ alter table o_tag add constraint FK6491FCA5A4FA5DC foreign key (fk_author_id) re
 
 -- mail
 alter table o_mail add constraint FKF86663165A4FA5DC foreign key (fk_from_id) references o_mail_recipient (recipient_id);
+create index idx_mail_meta_id_idx on o_mail (meta_mail_id);
 
 alter table o_mail_recipient add constraint FKF86663165A4FA5DG foreign key (fk_recipient_id) references o_bs_identity (id);
 
diff --git a/src/main/resources/database/oracle/alter_10_3_2_to_10_3_3.sql b/src/main/resources/database/oracle/alter_10_3_2_to_10_3_3.sql
index 88bf104c6e405401d058eef298f794d834fd13d2..9552d3d714e661de5b463601096b9b33f4996bd6 100644
--- a/src/main/resources/database/oracle/alter_10_3_2_to_10_3_3.sql
+++ b/src/main/resources/database/oracle/alter_10_3_2_to_10_3_3.sql
@@ -1 +1,3 @@
 alter table o_ac_offer add autobooking number default 0 not null;
+
+create index idx_mail_meta_id_idx on o_mail (meta_mail_id);
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index 2823622633719d6293d864f09d631ec3b9cd88eb..119d08a4ed4dee413861ff9aa8544e9f97e54198 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -2167,6 +2167,7 @@ create index idx_mail_from_idx on o_mail (fk_from_id);
 
 alter table o_mail_recipient add constraint FKF86663165A4FA5DG foreign key (fk_recipient_id) references o_bs_identity (id);
 create index idx_mailrec_rcp_idx on o_mail_recipient (fk_recipient_id);
+create index idx_mail_meta_id_idx on o_mail (meta_mail_id);
 
 alter table o_mail_to_recipient add constraint FKF86663165A4FA5DE foreign key (fk_mail_id) references o_mail (mail_id);
 create index idx_mailtorec_mail_idx on o_mail_to_recipient (fk_mail_id);
diff --git a/src/main/resources/database/postgresql/alter_10_3_0_to_10_3_1.sql b/src/main/resources/database/postgresql/alter_10_3_0_to_10_3_1.sql
index 1fbf609db37a91b58af580160217b2cf50534b87..b715e360eb32ab7dac59cf15eb2201c84187c58d 100644
--- a/src/main/resources/database/postgresql/alter_10_3_0_to_10_3_1.sql
+++ b/src/main/resources/database/postgresql/alter_10_3_0_to_10_3_1.sql
@@ -1 +1,3 @@
 alter table o_gta_task alter column g_taskname type varchar(1024);
+
+create index idx_mail_meta_id_idx on o_mail (meta_mail_id);
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 3fcd6cdba400428dd0e0851d4d270650f4e8ae76..df812acdbecca1d8393fe0ed4940c69bae440f31 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -2013,6 +2013,7 @@ create index idx_mail_from_idx on o_mail (fk_from_id);
 
 alter table o_mail_recipient add constraint FKF86663165A4FA5DG foreign key (fk_recipient_id) references o_bs_identity (id);
 create index idx_mailrec_rcp_idx on o_mail_recipient (fk_recipient_id);
+create index idx_mail_meta_id_idx on o_mail (meta_mail_id);
 
 alter table o_mail_to_recipient add constraint FKF86663165A4FA5DE foreign key (fk_mail_id) references o_mail (mail_id);
 create index idx_mailtorec_mail_idx on o_mail_to_recipient (fk_mail_id);