diff --git a/pom.xml b/pom.xml
index c1c187000b38647dc3bda3531a9714de0bd0759d..8f3a2770a6036eb083c0fb3c6a758f62068d8927 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1100,11 +1100,6 @@
 			<url>https://maven.java.net/content/groups/public/</url>
 			<layout>default</layout>
 		</repository>
-		<repository>
-			<id>nexus.codehaus.org</id>
-			<name>Codehaus nexus repo</name>
-			<url>https://nexus.codehaus.org/content/groups/public</url>
-		</repository>
 		<repository>
 			<id>jboss-public-repository-group</id>
 			<name>JBoss Public Maven Repository Group</name>
diff --git a/src/main/java/org/olat/core/commons/services/notifications/NotificationHelper.java b/src/main/java/org/olat/core/commons/services/notifications/NotificationHelper.java
index 9777e18509a78a201f20c97924b9247a7b55dfdb..074135dbf7c14af8ccaeb7d249e923f02e39db13 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/NotificationHelper.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/NotificationHelper.java
@@ -33,6 +33,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.User;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.cache.CacheWrapper;
 import org.olat.core.util.coordinate.CoordinatorManager;
@@ -132,7 +133,12 @@ public class NotificationHelper {
 			String[] properties = new String[propertyHandlers.size()];
 			for (int i = 0; i < propertyHandlers.size(); i++) {
 				UserPropertyHandler propHandler = propertyHandlers.get(i);
-				properties[i] = propHandler.getUserProperty(user, trans.getLocale());
+				String prop = propHandler.getUserProperty(user, trans.getLocale());
+				if(StringHelper.containsNonWhitespace(prop)) {
+					properties[i] = prop;
+				} else {
+					properties[i] = "-";
+				}
 			}
 			formattedName = trans.translate("user.formatted", properties);
 		}
diff --git a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
index 61ba5102e0e0968c668c75c8e27c41abaef4dd2c..71fe27d81280a1ad21ae665b9de534cb491bb937 100644
--- a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
+++ b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
@@ -45,6 +45,7 @@ import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
@@ -99,6 +100,10 @@ public class ForumNotificationsHandler extends LogDelegator implements Notificat
 					String name;
 					if(modifier != null) {
 						name = NotificationHelper.getFormatedName(modifier);
+					} else if(StringHelper.containsNonWhitespace(mInfo.getPseudonym())) {
+						name = mInfo.getPseudonym();
+					} else if(mInfo.isGuest()) {
+						name = translator.translate("anonymous.poster");
 					} else {
 						name = NotificationHelper.getFormatedName(creator);
 					}
diff --git a/src/main/java/org/olat/modules/fo/manager/ForumManager.java b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
index e404f2be37924c86b8d40990752dc5f3ac6dffb6..56ac4e6215d81dd3a3d2e4b73363f04b13f7dcf4 100644
--- a/src/main/java/org/olat/modules/fo/manager/ForumManager.java
+++ b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
@@ -141,12 +141,6 @@ public class ForumManager {
 		return  dbQuery.getResultList();
 	}
 
-	public List<Long> getAllForumKeys(){
-		return dbInstance.getCurrentEntityManager()
-				.createNamedQuery("getAllForumKeys", Long.class)
-				.getResultList();
-	}
-
 	/**
 	 * 
 	 * @param forum_id
@@ -280,7 +274,10 @@ public class ForumManager {
 		  .append(" ) as numOfMessages")
 		  .append(" , (select max(replies.lastModified) from fomessage as replies")
 		  .append("  where replies.threadtop.key=msg.key and replies.forum.key=:forumKey")
-		  .append(" ) as lastModified");
+		  .append(" ) as lastModified")
+		  .append(" , (select count(read.key) from foreadmessage as read, fomessage as posts")
+		  .append("  where (posts.threadtop.key=msg.key or posts.key=msg.key) and read.message.key=posts.key and read.identity.key=:identityKey")
+		  .append(" ) as numOfReadMessages");
 		if(identity != null) {
 			sb.append(" ,(select count(mark.key) from ").append(MarkImpl.class.getName()).append(" as mark ")
 			  .append("   where mark.creator.key=:identityKey and mark.resId=:forumKey and msg.key = cast(mark.resSubPath as long) and mark.resName='Forum'")
@@ -293,10 +290,9 @@ public class ForumManager {
 
 		TypedQuery<Object[]> objectsQuery = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Object[].class)
-				.setParameter("forumKey", forum.getKey());
-		if(identity != null) {
-			objectsQuery.setParameter("identityKey", identity.getKey());
-		}
+				.setParameter("forumKey", forum.getKey())
+				.setParameter("identityKey", identity.getKey());
+
 		
 		List<Object[]> objects = objectsQuery.getResultList();
 		List<ForumThread> threadList = new ArrayList<>(objects.size());
@@ -307,9 +303,13 @@ public class ForumManager {
 			int numOfMessages = numOfMessagesLong == null ? 1 : numOfMessagesLong.intValue() + 1;
 			String creator = userManager.getUserDisplayName(msg.getCreator());
 			ForumThread thread = new ForumThread(msg, creator, lastModifed, numOfMessages);
+
+			Number readMessages = (Number)object[3];
+			int numOfReadMessages = readMessages == null ? 0 : readMessages.intValue();
+			thread.setNewMessages(numOfMessages - numOfReadMessages);
 			
 			if(identity != null) {
-				Number numOfMarkedMessagesLong = (Number)object[3];
+				Number numOfMarkedMessagesLong = (Number)object[4];
 				int numOfMarkedMessages = numOfMarkedMessagesLong == null ? 0 : numOfMarkedMessagesLong.intValue();
 				thread.setMarkedMessages(numOfMarkedMessages);
 			}
@@ -347,20 +347,6 @@ public class ForumManager {
 		return pseudonyms == null || pseudonyms.isEmpty() ? null : pseudonyms.get(0);
 	}
 	
-	public MessageLight getLightMessageById(Long messageKey) {
-		StringBuilder query = new StringBuilder();
-		query.append("select msg from fomessage as msg")
-		     .append(" left join fetch msg.creator as creator")
-		     .append(" left join fetch msg.modifier as modifier")
-		     .append(" where msg.key=:messageKey ");
-		
-		List<MessageLight> messages = dbInstance.getCurrentEntityManager()
-				.createQuery(query.toString(), MessageLight.class)
-				.setParameter("messageKey", messageKey)
-				.getResultList();
-		return messages == null || messages.isEmpty() ? null : messages.get(0);
-	}
-	
 	public List<MessageLight> getLightMessagesByForum(Forum forum) {
 		StringBuilder query = new StringBuilder();
 		query.append("select msg from folightmessage as msg")
diff --git a/src/main/java/org/olat/modules/fo/model/ForumImpl.java b/src/main/java/org/olat/modules/fo/model/ForumImpl.java
index 35716ef06de369b927b86236e7c9544ad9440def..0ee927494f0367ca5b5a2bf13cc941762ca1abff 100644
--- a/src/main/java/org/olat/modules/fo/model/ForumImpl.java
+++ b/src/main/java/org/olat/modules/fo/model/ForumImpl.java
@@ -30,8 +30,6 @@ import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
-import javax.persistence.NamedQueries;
-import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
@@ -51,9 +49,7 @@ import org.olat.modules.fo.Forum;
  */
 @Entity(name="forum")
 @Table(name="o_forum")
-@NamedQueries({
-	@NamedQuery(name="getAllForumKeys", query="select fo.key from forum as fo")
-})
+//@NamedQueries({})
 public class ForumImpl implements Forum, CreateInfo, Persistable{
 
 	private static final long serialVersionUID = 3240047228287740990L;
diff --git a/src/main/java/org/olat/modules/fo/model/ForumThread.java b/src/main/java/org/olat/modules/fo/model/ForumThread.java
index 0f9762692ec23e4660f8342210415696c9aceb20..bdc198ea6a5c26725401711ba8f4670234fd8cd8 100644
--- a/src/main/java/org/olat/modules/fo/model/ForumThread.java
+++ b/src/main/java/org/olat/modules/fo/model/ForumThread.java
@@ -32,14 +32,14 @@ import org.olat.modules.fo.MessageRef;
  */
 public class ForumThread implements MessageRef {
 	
-	private int type;
-	private Long key;
-	private String title;
-	private Date lastModified;
+	private final int type;
+	private final Long key;
+	private final String title;
+	private final Date lastModified;
 	
-	private boolean guest;
-	private String pseudonym;
-	private String creatorFullname;
+	private final boolean guest;
+	private final String pseudonym;
+	private final String creatorFullname;
 	
 	private int markedMessages;
 	private int newMessages;
@@ -55,6 +55,7 @@ public class ForumThread implements MessageRef {
 			this.lastModified = lastModified;
 		}
 		this.guest = message.isGuest();
+		this.pseudonym = message.getPseudonym();
 		this.creatorFullname = creatorFullname;
 		this.numOfPosts = numOfPosts;
 	}
diff --git a/src/main/java/org/olat/modules/fo/ui/ForumController.java b/src/main/java/org/olat/modules/fo/ui/ForumController.java
index d20ed7b72147e6cf1981607ada5e3d35983b8337..67d9b37c25e5c197475bb61f4174ceb4f2a9d3bd 100644
--- a/src/main/java/org/olat/modules/fo/ui/ForumController.java
+++ b/src/main/java/org/olat/modules/fo/ui/ForumController.java
@@ -295,7 +295,7 @@ public class ForumController extends BasicController implements GenericEventList
 		viewCtrl = new MessageListController(ureq, bbwControl, forum, focallback);
 		viewCtrl.loadThread(ureq, thread);
 		viewCtrl.scrollTo(scrollTo);
-		viewCtrl.doShowMarked();
+		viewCtrl.doShowNew();
 		listenTo(viewCtrl);
 		putContent(viewCtrl);
 		addToHistory(ureq, viewCtrl);
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageListController.java b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
index 3d491d8ec33a94d5cd04d5186662adcef26983e2..31d7b4e9e06af2370db6404d8738b8649b8e7225 100644
--- a/src/main/java/org/olat/modules/fo/ui/MessageListController.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
@@ -1114,10 +1114,9 @@ public class MessageListController extends BasicController implements GenericEve
 		mainVC.contextPut("threadMode", Boolean.FALSE);
 		mainVC.contextPut("mode", "new");
 		
-		Set<Long> rms = forumManager.getReadSet(getIdentity(), forum);
 		List<MessageView> views = new ArrayList<>();
 		for(MessageView view:backupViews) {
-			if(!rms.contains(view.getKey())) {
+			if(view.isNewMessage()) {
 				views.add(view);
 			}
 		}
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageView.java b/src/main/java/org/olat/modules/fo/ui/MessageView.java
index 39ccffb7a6bb8d61c1bd142e309b08d47aad1ecb..1c2ee21dcc7f220fb858ac7ff2963319a7191a15 100644
--- a/src/main/java/org/olat/modules/fo/ui/MessageView.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageView.java
@@ -88,7 +88,7 @@ public class MessageView extends MessageLightView {
 		this.formattedLastModified = formattedLastModified;
 	}
 
-	public boolean getNewMessage() {
+	public boolean isNewMessage() {
 		return newMessage;
 	}
 
diff --git a/src/main/java/org/olat/modules/fo/ui/ThreadListController.java b/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
index e3def678e6402e091b598f23426fce665b2632e3..2c8b95211ba71ce73187769ef11ed87e479dffa1 100644
--- a/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
+++ b/src/main/java/org/olat/modules/fo/ui/ThreadListController.java
@@ -26,6 +26,7 @@ import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.commons.persistence.SortKey;
 import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
@@ -117,11 +118,11 @@ public class ThreadListController extends FormBasicController {
 			userListButton.setElementCssClass("o_sel_forum_filter");
 		}
 		
-		if(!guestOnly && formLayout instanceof FormLayoutContainer) {
+		if(formLayout instanceof FormLayoutContainer) {
 			SearchServiceUIFactory searchServiceUIFactory = (SearchServiceUIFactory)CoreSpringFactory.getBean(SearchServiceUIFactory.class);
 			searchController = searchServiceUIFactory.createInputController(ureq, getWindowControl(), DisplayOption.STANDARD, mainForm);
 			listenTo(searchController);
-			((FormLayoutContainer)formLayout).put("search_input", searchController.getInitialComponent());
+			((FormLayoutContainer)formLayout).add("search_input", searchController.getFormItem());
 		}
 
 		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
@@ -165,6 +166,14 @@ public class ThreadListController extends FormBasicController {
 		}
 	}
 
+	@Override
+	public void event(UserRequest ureq, Component source, Event event) {
+		if(searchController != null) {
+			searchController.event(ureq, source, event);
+		}
+		super.event(ureq, source, event);
+	}
+
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
 		if(newThreadCtrl == source) {
diff --git a/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java b/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java
index 5606d294c1b02c240c42f7384eb1763e557b2372..94a35e4f634a413bf575cf6cbe7c54848a5fe3d8 100644
--- a/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java
+++ b/src/main/java/org/olat/modules/fo/ui/ThreadListDataModel.java
@@ -44,7 +44,7 @@ import org.olat.modules.fo.model.ForumThread;
 public class ThreadListDataModel extends DefaultFlexiTableDataModel<ForumThread>
 	implements SortableFlexiTableDataModel<ForumThread> {
 	
-	private Translator translator;
+	private final Translator translator;
 	
 	public ThreadListDataModel(FlexiTableColumnModel columnModel, Translator translator) {
 		super(columnModel);
diff --git a/src/main/java/org/olat/search/ui/ResultsSearchController.java b/src/main/java/org/olat/search/ui/ResultsSearchController.java
index ace255d35c3108706befb2169af651d1823f986d..e2b810c250efb13679f054d9d100661fabad24f7 100644
--- a/src/main/java/org/olat/search/ui/ResultsSearchController.java
+++ b/src/main/java/org/olat/search/ui/ResultsSearchController.java
@@ -116,7 +116,7 @@ public class ResultsSearchController extends SearchInputController {
 	}
 
 	@Override
-	protected void formOK(UserRequest ureq) {
+	public void formOK(UserRequest ureq) {
 		doSearch(ureq);
 	}
 	
@@ -126,7 +126,7 @@ public class ResultsSearchController extends SearchInputController {
 	}
 
 	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+	public void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if (source == searchButton) {
 			doSearch(ureq);
 		} else if (didYouMeanLinks != null && didYouMeanLinks.contains(source)) {
diff --git a/src/main/java/org/olat/search/ui/SearchInputController.java b/src/main/java/org/olat/search/ui/SearchInputController.java
index 0d0c43d10fc5885ceb71d342385bbe8ddef2a6eb..f068623d1fa19b66ecb4bcdaabb2383d03c2ebcf 100644
--- a/src/main/java/org/olat/search/ui/SearchInputController.java
+++ b/src/main/java/org/olat/search/ui/SearchInputController.java
@@ -268,7 +268,7 @@ public class SearchInputController extends FormBasicController implements Generi
 	}
 
 	@Override
-	protected void formOK(UserRequest ureq) {
+	public void formOK(UserRequest ureq) {
 		doSearch(ureq);
 	}
 	
@@ -278,7 +278,7 @@ public class SearchInputController extends FormBasicController implements Generi
 	}
 
 	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+	public void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if (source == searchButton) {
 			doSearch(ureq);
 		} else if (didYouMeanLinks != null && didYouMeanLinks.contains(source)) {
@@ -289,10 +289,7 @@ public class SearchInputController extends FormBasicController implements Generi
 	}
 	
 	protected void doSearch(UserRequest ureq) {
-		if (resultCtlr != null) {
-			removeAsListenerAndDispose(resultCtlr);
-			resultCtlr = null;
-		}
+		if (resultCtlr != null) return;
 		
 		String oldSearchString = null;
 		Properties props = getPersistedSearch();
@@ -410,7 +407,7 @@ public class SearchInputController extends FormBasicController implements Generi
 	}
 
 	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
+	public void event(UserRequest ureq, Controller source, Event event) {
 		if (source == resultCtlr) {
 			if (event instanceof SearchEvent) {
 				SearchEvent goEvent = (SearchEvent)event;
@@ -420,6 +417,7 @@ public class SearchInputController extends FormBasicController implements Generi
 				setSearchString(resultCtlr.getSearchString());
 			}
 		} else if (source == searchDialogBox) {
+			cleanUp();
 			fireEvent(ureq, Event.DONE_EVENT);
 		}
 	}
@@ -427,10 +425,17 @@ public class SearchInputController extends FormBasicController implements Generi
 	public void closeSearchDialogBox() {
 		if(searchDialogBox != null) {
 			searchDialogBox.deactivate();
-			searchDialogBox = null;
+			cleanUp();
 		}
 	}
 	
+	private void cleanUp() {
+		removeAsListenerAndDispose(searchDialogBox);
+		removeAsListenerAndDispose(resultCtlr);
+		searchDialogBox = null;
+		resultCtlr = null;
+	}
+	
 	/**
 	 * 
 	 * @param ureq
@@ -438,7 +443,7 @@ public class SearchInputController extends FormBasicController implements Generi
 	 */
 	public void gotoSearchResult(UserRequest ureq, ResultDocument document) {
 		try {
-		// attach the launcher data
+			// attach the launcher data
 			closeSearchDialogBox();
 			String url = document.getResourceUrl();
 			if(!StringHelper.containsNonWhitespace(url)) {
@@ -446,8 +451,8 @@ public class SearchInputController extends FormBasicController implements Generi
 				getWindowControl().setWarning(getTranslator().translate("error.resource.could.not.found"));
 			} else {
 				BusinessControl bc = BusinessControlFactory.getInstance().createFromString(url);
-			  WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl());
-			  NewControllerFactory.getInstance().launch(ureq, bwControl);
+				WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl());
+				NewControllerFactory.getInstance().launch(ureq, bwControl);
 			}
 		} catch (Exception ex) {
 			log.debug("Document not found");
diff --git a/src/test/java/org/olat/modules/fo/ForumManagerTest.java b/src/test/java/org/olat/modules/fo/ForumManagerTest.java
index 143a8ff7d5e7d0427e11b0eab5d161b58218dd67..302935dc930c88dfa9700757f10a09f4f4eeb0d7 100644
--- a/src/test/java/org/olat/modules/fo/ForumManagerTest.java
+++ b/src/test/java/org/olat/modules/fo/ForumManagerTest.java
@@ -29,12 +29,17 @@ package org.olat.modules.fo;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.Locale;
+import java.util.UUID;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.olat.basesecurity.BaseSecurity;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.modules.fo.manager.ForumManager;
+import org.olat.modules.fo.model.ForumThread;
+import org.olat.modules.fo.model.ForumUserStatistics;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.olat.user.UserManager;
@@ -54,9 +59,11 @@ public class ForumManagerTest extends OlatTestCase {
 	public UserManager userManager;
 	@Autowired
 	public ForumManager forumManager;
+	@Autowired
+	public BaseSecurity securityManager;
 	
 	@Test
-	public void testGetThread() {
+	public void getThread() {
 		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-4");
 		Forum fo = forumManager.addAForum();
 		dbInstance.commit();
@@ -77,21 +84,21 @@ public class ForumManagerTest extends OlatTestCase {
 	}
 
 	@Test
-	public void testCreateAndGetMessages_loadForumID() throws Exception {
+	public void createAndGetMessages_loadForumID() throws Exception {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
 		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
 		Forum fo = forumManager.addAForum();
 		dbInstance.commit();
 
 		Message topMessage = forumManager.createMessage(fo, id1, false);
-		topMessage.setTitle("stufe 0: subject 0");
-		topMessage.setBody("body/n dep 0");
+		topMessage.setTitle("Create and get message");
+		topMessage.setBody("Create and get message");
 		forumManager.addTopMessage(topMessage);
 		dbInstance.commit();
 
 		Message reply = forumManager.createMessage(fo, id2, false);
-		reply.setTitle("stufe 0: subject 0");
-		reply.setBody("body/n dep 0");
+		reply.setTitle("Re: Create and get message");
+		reply.setBody("Create and get message");
 		forumManager.replyToMessage(reply, topMessage);
 		dbInstance.commitAndCloseSession();
 
@@ -107,36 +114,394 @@ public class ForumManagerTest extends OlatTestCase {
 	}
 	
 	@Test
-	public void testCountMessagesByForumID() {
+	public void getForumThreads() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get forum threads");
+		thread1.setBody("Get forum threads");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(forum, id2, false);
+		reply.setTitle("Re: Get forum threads");
+		reply.setBody("Get forum threads");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		Message thread2 = forumManager.createMessage(forum, id1, false);
+		thread2.setTitle("More on get forum threads");
+		thread2.setBody("More on get forum threads");
+		forumManager.addTopMessage(thread2);
+		dbInstance.commit();
+		
+		List<ForumThread> forumThreads = forumManager.getForumThreads(forum, id1);
+		Assert.assertNotNull(forumThreads);
+		Assert.assertEquals(2, forumThreads.size());
+		
+		ForumThread forumThread1 = null;
+		ForumThread forumThread2 = null;
+		for(ForumThread forumThread:forumThreads) {
+			if(forumThread.getKey().equals(thread1.getKey())) {
+				forumThread1 = forumThread;
+			} else if(forumThread.getKey().equals(thread2.getKey())) {
+				forumThread2 = forumThread;
+			}
+		}
+		
+		Assert.assertNotNull(forumThread1);
+		Assert.assertNotNull(forumThread2);
+	}
+	
+	@Test
+	public void getForumUserStatistics() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get forum user statistics");
+		thread1.setBody("Get forum user statistics");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(forum, id2, false);
+		reply.setTitle("Re: Get forum user statistics");
+		reply.setBody("Get forum user statistics and other usefull stuff to we need");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		List<ForumUserStatistics> userStatistics = forumManager.getForumUserStatistics(forum);
+		Assert.assertNotNull(userStatistics);
+		Assert.assertEquals(2, userStatistics.size());
+
+		ForumUserStatistics userStatistic1 = null;
+		ForumUserStatistics userStatistic2 = null;
+		for(ForumUserStatistics userStatistic:userStatistics) {
+			if(userStatistic.getIdentity().getKey().equals(id1.getKey())) {
+				userStatistic1 = userStatistic;
+			} else if(userStatistic.getIdentity().getKey().equals(id2.getKey())) {
+				userStatistic2 = userStatistic;
+			}
+		}
+		
+		Assert.assertNotNull(userStatistic1);
+		Assert.assertNotNull(userStatistic2);
+		
+		//stats user 1
+		Assert.assertEquals(1, userStatistic1.getNumOfThreads());
+		Assert.assertEquals(0, userStatistic1.getNumOfReplies());
+		Assert.assertTrue(userStatistic1.getNumOfWords() > 1);
+		Assert.assertTrue(userStatistic1.getNumOfCharacters() > 1);
+		
+		//stats user 2
+		Assert.assertEquals(0, userStatistic2.getNumOfThreads());
+		Assert.assertEquals(1, userStatistic2.getNumOfReplies());
+		Assert.assertTrue(userStatistic2.getNumOfWords() > 1);
+		Assert.assertTrue(userStatistic2.getNumOfCharacters() > 1);
+	}
+	
+	@Test
+	public void getLightMessagesByForum() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get messages light by forum");
+		thread1.setBody("Get messages light by forum");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+		
+		Message reply = forumManager.createMessage(forum, id2, false);
+		reply.setTitle("Re: Get messages light by forum");
+		reply.setBody("Get messages light by forum and other usefull stuff we need");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		//load and check the messages
+		List<MessageLight> messages = forumManager.getLightMessagesByForum(forum);
+		dbInstance.commitAndCloseSession();
+		
+		MessageLight message1 = null;
+		MessageLight message2 = null;
+		for(MessageLight message:messages) {
+			if(message.getKey().equals(thread1.getKey())) {
+				message1 = message;
+			} else if(message.getKey().equals(reply.getKey())) {
+				message2 = message;
+			}
+		}
+		
+		//check thread
+		Assert.assertNotNull(message1);
+		Assert.assertEquals(thread1.getKey(), message1.getKey());
+		Assert.assertEquals(thread1.getTitle(), message1.getTitle());
+		Assert.assertEquals(thread1.getBody(), message1.getBody());
+		Assert.assertEquals(thread1.getCreator(), id1);
+		Assert.assertNull(message1.getThreadtop());
+		
+		//check reply
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(message2);
+		Assert.assertEquals(reply.getKey(), message2.getKey());
+		Assert.assertEquals(reply.getTitle(), message2.getTitle());
+		Assert.assertEquals(reply.getBody(), message2.getBody());
+		Assert.assertEquals(reply.getCreator(), id2);
+		Assert.assertNotNull(message2.getThreadtop());
+		Assert.assertEquals(thread1.getKey(), message2.getThreadtop().getKey());
+	}
+	
+	@Test
+	public void getLightMessagesByThread() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get messages light by thread");
+		thread1.setBody("Get messages light by thread");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+		
+		Message reply = forumManager.createMessage(forum, id2, false);
+		reply.setTitle("Re: Get messages light by thread");
+		reply.setBody("Get messages light by thread and other usefull stuff we need");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		//load and check the messages
+		List<MessageLight> messages = forumManager.getLightMessagesByThread(forum, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		Assert.assertNotNull(messages);
+		Assert.assertEquals(1, messages.size());
+		MessageLight message = messages.get(0);
+		Assert.assertNotNull(message);
+		Assert.assertEquals(reply.getKey(), message.getKey());
+		Assert.assertEquals(reply.getTitle(), message.getTitle());
+		Assert.assertEquals(reply.getBody(), message.getBody());
+		Assert.assertEquals(reply.getCreator(), id2);
+		Assert.assertNotNull(message.getThreadtop());
+		Assert.assertEquals(thread1.getKey(), message.getThreadtop().getKey());
+	}
+	
+	@Test
+	public void getLightMessagesOfGuests() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity guest2 =  securityManager.getAndUpdateAnonymousUserForLanguage(Locale.ENGLISH);
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get messages light of guests");
+		thread1.setBody("Get messages light of guests");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+		
+		Message reply = forumManager.createMessage(forum, guest2, true);
+		reply.setTitle("Re: Get messages light of guests");
+		reply.setBody("Get messages light of guests and other usefull stuff we need");
+		reply.setPseudonym("Guest pseudo 1289");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		//load and check the messages
+		List<MessageLight> messages = forumManager.getLightMessagesOfGuests(forum);
+		dbInstance.commitAndCloseSession();
+		
+		Assert.assertNotNull(messages);
+		Assert.assertEquals(1, messages.size());
+		MessageLight message = messages.get(0);
+		Assert.assertNotNull(message);
+		Assert.assertEquals(reply.getKey(), message.getKey());
+		Assert.assertEquals(reply.getTitle(), message.getTitle());
+		Assert.assertEquals(reply.getBody(), message.getBody());
+		Assert.assertEquals("Guest pseudo 1289", message.getPseudonym());
+		Assert.assertNull(message.getCreator());
+		Assert.assertTrue(message.isGuest());
+		Assert.assertNotNull(message.getThreadtop());
+		Assert.assertEquals(thread1.getKey(), message.getThreadtop().getKey());
+	}
+	
+	@Test
+	public void getLightMessagesByUser() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 =  JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Identity id3 =  JunitTestHelper.createAndPersistIdentityAsRndUser("fo-3");
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get messages light by user");
+		thread1.setBody("Get messages light by user");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+		
+		Message reply = forumManager.createMessage(forum, id2, false);
+		reply.setTitle("Re: Get messages light by user");
+		reply.setBody("Get messages light by user and other usefull stuff we need");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		Message replyPseudo = forumManager.createMessage(forum, id3, false);
+		replyPseudo.setTitle("Re: Get messages light by user");
+		replyPseudo.setBody("Get messages light by user and other usefull stuff we need");
+		replyPseudo.setPseudonym("Id pseudo 3476");
+		forumManager.replyToMessage(replyPseudo, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		//load and check the messages of first user
+		List<MessageLight> messagesOfUser1 = forumManager.getLightMessagesByUser(forum, id1);
+		dbInstance.commitAndCloseSession();
+		
+		Assert.assertNotNull(messagesOfUser1);
+		Assert.assertEquals(1, messagesOfUser1.size());
+		MessageLight messageOfUser1 = messagesOfUser1.get(0);
+		Assert.assertNotNull(messageOfUser1);
+		Assert.assertEquals(thread1.getKey(), messageOfUser1.getKey());
+		Assert.assertEquals(thread1.getTitle(), messageOfUser1.getTitle());
+		Assert.assertEquals(thread1.getBody(), messageOfUser1.getBody());
+		Assert.assertNotNull(messageOfUser1.getCreator());
+		Assert.assertEquals(id1, messageOfUser1.getCreator());
+		Assert.assertFalse(messageOfUser1.isGuest());
+		Assert.assertNull(messageOfUser1.getThreadtop());
+		
+		//load and check the messages of second user
+		List<MessageLight> messagesOfUser2 = forumManager.getLightMessagesByUser(forum, id2);
+		dbInstance.commitAndCloseSession();
+		
+		Assert.assertNotNull(messagesOfUser2);
+		Assert.assertEquals(1, messagesOfUser2.size());
+		MessageLight messageOfUser2 = messagesOfUser2.get(0);
+		Assert.assertNotNull(messageOfUser2);
+		Assert.assertEquals(reply.getKey(), messageOfUser2.getKey());
+		Assert.assertEquals(reply.getTitle(), messageOfUser2.getTitle());
+		Assert.assertEquals(reply.getBody(), messageOfUser2.getBody());
+		Assert.assertNotNull(messageOfUser2.getCreator());
+		Assert.assertEquals(id2, messageOfUser2.getCreator());
+		Assert.assertFalse(messageOfUser2.isGuest());
+		Assert.assertNotNull(messageOfUser2.getThreadtop());
+		Assert.assertEquals(thread1.getKey(), messageOfUser2.getThreadtop().getKey());
+		
+		//load and check the messages of third user which use a pseudo
+		List<MessageLight> messagesOfUser3 = forumManager.getLightMessagesByUser(forum, id3);
+		dbInstance.commitAndCloseSession();
+		Assert.assertNotNull(messagesOfUser3);
+		Assert.assertTrue(messagesOfUser3.isEmpty());
+	}
+	
+	@Test
+	public void getLightMessagesByUserUnderPseudo() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 =  JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum forum = forumManager.addAForum();
+		dbInstance.commit();
+		
+		Message thread1 = forumManager.createMessage(forum, id1, false);
+		thread1.setTitle("Get messages light by user with pseudo");
+		thread1.setBody("Get messages light by user with pseudo");
+		forumManager.addTopMessage(thread1);
+		dbInstance.commit();
+		
+		Message reply = forumManager.createMessage(forum, id2, false);
+		reply.setTitle("Re: Get messages light by user with pseudo");
+		reply.setBody("Get messages light by user and other usefull stuff we need");
+		forumManager.replyToMessage(reply, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		Message replyPseudo = forumManager.createMessage(forum, id2, false);
+		replyPseudo.setTitle("Re: Get messages light by user with pseudo");
+		replyPseudo.setBody("Get messages light by user and other usefull stuff we need");
+		String pseudo = "Id pseudo " + UUID.randomUUID();
+		replyPseudo.setPseudonym(pseudo);
+		forumManager.replyToMessage(replyPseudo, thread1);
+		dbInstance.commitAndCloseSession();
+		
+		//load and check the messages of user with pseudo
+		List<MessageLight> messagesOfUser2 = forumManager.getLightMessagesByUserUnderPseudo(forum, id2, pseudo);
+		dbInstance.commitAndCloseSession();
+		
+		Assert.assertNotNull(messagesOfUser2);
+		Assert.assertEquals(1, messagesOfUser2.size());
+		MessageLight messageUnderPseudo = messagesOfUser2.get(0);
+		Assert.assertNotNull(messageUnderPseudo);
+		Assert.assertEquals(replyPseudo.getKey(), messageUnderPseudo.getKey());
+		Assert.assertEquals(replyPseudo.getTitle(), messageUnderPseudo.getTitle());
+		Assert.assertEquals(replyPseudo.getBody(), messageUnderPseudo.getBody());
+		Assert.assertNotNull(messageUnderPseudo.getCreator());
+		Assert.assertEquals(id2, messageUnderPseudo.getCreator());
+		Assert.assertFalse(messageUnderPseudo.isGuest());
+		Assert.assertNotNull(messageUnderPseudo.getThreadtop());
+		Assert.assertEquals(thread1.getKey(), messageUnderPseudo.getThreadtop().getKey());
+	}
+	
+	@Test
+	public void countMessagesByForumID() {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
 		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
 		Forum fo = forumManager.addAForum();
 		dbInstance.commit();
 
 		Message topMessage = forumManager.createMessage(fo, id1, false);
-		topMessage.setTitle("stufe 0: subject 0");
-		topMessage.setBody("body/n dep 0");
+		topMessage.setTitle("Messages count by forum");
+		topMessage.setBody("Messages count by forum");
 		forumManager.addTopMessage(topMessage);
 		dbInstance.commit();
 
 		Message reply = forumManager.createMessage(fo, id2, false);
-		reply.setTitle("stufe 1: subject 0");
-		reply.setBody("body/n dep 0");
+		reply.setTitle("Re: Messages count by forum");
+		reply.setBody("Messages count by forum");
 		forumManager.replyToMessage(reply, topMessage);
 		dbInstance.commit();
 		
 		Message reply2 = forumManager.createMessage(fo, id1, false);
-		reply2.setTitle("stufe 1: subject 0");
-		reply2.setBody("body/n dep 0");
+		reply2.setTitle("Re: Re: Messages count by forum");
+		reply2.setBody("Messages count by forum");
 		forumManager.replyToMessage(reply2, reply);
 		dbInstance.commit();
 		
 		int numOfMessages = forumManager.countMessagesByForumID(fo.getKey());
 		Assert.assertEquals("Not the right number of messages for this forum", 3, numOfMessages);
 	}
+
+	@Test
+	public void countThreadsByForumID() {
+		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-1");
+		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-2");
+		Forum fo = forumManager.addAForum();
+		dbInstance.commit();
+
+		Message topMessage = forumManager.createMessage(fo, id1, false);
+		topMessage.setTitle("Threads count by forum");
+		topMessage.setBody("Threads count by forum");
+		forumManager.addTopMessage(topMessage);
+		dbInstance.commit();
+
+		Message reply = forumManager.createMessage(fo, id2, false);
+		reply.setTitle("Re: Threads count by forum");
+		reply.setBody("Threads count by forum");
+		forumManager.replyToMessage(reply, topMessage);
+		dbInstance.commit();
+		
+		Message topMessage2 = forumManager.createMessage(fo, id2, false);
+		topMessage2.setTitle("More on threads count by forum");
+		topMessage2.setBody("More on threads count by forum");
+		forumManager.addTopMessage(topMessage2);
+		dbInstance.commit();
+		
+		int numOfThreads = forumManager.countThreadsByForumID(fo.getKey());
+		Assert.assertEquals("Not the right number of threads for this forum", 2, numOfThreads);
+	}
 	
 	@Test
-	public void testGetNewMessageInfo() {
+	public void getNewMessageInfo() {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-5");
 		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-6");
 		Forum fo = forumManager.addAForum();
@@ -169,7 +534,7 @@ public class ForumManagerTest extends OlatTestCase {
 	}
 	
 	@Test
-	public void testDeleteMessageTree() {
+	public void deleteMessageTree() {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-5");
 		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-6");
 		Forum fo = forumManager.addAForum();
@@ -203,7 +568,7 @@ public class ForumManagerTest extends OlatTestCase {
 	}
 	
 	@Test
-	public void testDeleteForum() {
+	public void deleteForum() {
 		Identity id1 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-7");
 		Identity id2 = JunitTestHelper.createAndPersistIdentityAsRndUser("fo-8");
 		Forum fo = forumManager.addAForum();
diff --git a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
index a8b503a5a0081edfcc3368acd4c2b7da4004e665..697ddc6694345a7f30fcb05efff09f227e81eecc 100644
--- a/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
+++ b/src/test/java/org/olat/selenium/page/graphene/OOGraphene.java
@@ -176,7 +176,7 @@ public class OOGraphene {
 	
 	public static final void waitAndCloseBlueMessageWindow(WebDriver browser) {
 		try {
-			OOGraphene.waitElement(closeBlueBoxButtonBy, 1, browser);
+			waitElement(closeBlueBoxButtonBy, 1, browser);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -188,10 +188,10 @@ public class OOGraphene {
 		for(WebElement closeButton:closeButtons) {
 			if(closeButton.isDisplayed()) {
 				try {
-					clickCloseButton(closeButton);
+					clickCloseButton(browser, closeButton);
 				} catch (TimeoutException e) {
 					try {
-						clickCloseButton(closeButton);
+						clickCloseButton(browser, closeButton);
 					} catch(Exception e2) {
 						//
 					}
@@ -200,10 +200,10 @@ public class OOGraphene {
 		}
 	}
 	
-	private static final void clickCloseButton(WebElement closeButton) {
+	private static final void clickCloseButton(WebDriver browser, WebElement closeButton) {
 		try {
 			closeButton.click();
-			Graphene.waitModel()
+			Graphene.waitModel(browser)
 				.withTimeout(1000, TimeUnit.MILLISECONDS)
 				.pollingEvery(poolingDuration, TimeUnit.MILLISECONDS)
 				.until(new CloseAlertInfoPredicate());
@@ -211,4 +211,14 @@ public class OOGraphene {
 			//e.printStackTrace();
 		}
 	}
+	
+	/*public static void closeOffCanvas(WebDriver browser) {
+		By closeBy = By.cssSelector("a.o_offcanvas_close");
+		List<WebElement> closeButtons = browser.findElements(closeBy);
+		if(closeButtons.size() == 1 && closeButtons.get(0).isDisplayed()) {
+			closeButtons.get(0).click();
+			By bodyBy = By.xpath("//body[contains(@class,'o_offcanvas_right_visible')]");
+			OOGraphene.waitElementDisappears(bodyBy, 2, browser);
+		}	
+	}*/
 }
diff --git a/src/test/java/org/olat/selenium/page/group/GroupPage.java b/src/test/java/org/olat/selenium/page/group/GroupPage.java
index 393ddee294610135434ba1b6392993c7a46b6f05..d4036a2252b7e311f29fab92a45855d41ba145f8 100644
--- a/src/test/java/org/olat/selenium/page/group/GroupPage.java
+++ b/src/test/java/org/olat/selenium/page/group/GroupPage.java
@@ -49,6 +49,7 @@ public class GroupPage {
 	private static final By toolsBy = By.className("o_sel_collab_tools");
 	private static final By editDetails = By.className("o_sel_group_edit_title");
 	private static final By bookingConfigBy = By.className("o_sel_accesscontrol_create");
+	private static final By memberMenuItem = By.cssSelector("li.o_sel_group_members a");
 	
 	private WebDriver browser;
 	
@@ -148,30 +149,29 @@ public class GroupPage {
 		OOGraphene.waitBusy(browser);
 	}
 	
-	public GroupPage setVisibility(boolean owners, boolean participants, boolean waitingList) {	
+	public GroupPage setVisibility(boolean owners, boolean participants, boolean waitingList) {
 		if(owners) {
 			By showOwnersBy = By.cssSelector(".o_sel_group_show_owners input[type='checkbox']");
 			browser.findElement(showOwnersBy).click();
 			OOGraphene.waitBusy(browser);
-			OOGraphene.closeBlueMessageWindow(browser);
+			OOGraphene.waitElement(memberMenuItem, 2, browser);
 		}
 		
 		if(participants) {
 			By showParticipants = By.cssSelector(".o_sel_group_show_participants input[type='checkbox']");
 			browser.findElement(showParticipants).click();
 			OOGraphene.waitBusy(browser);
-			OOGraphene.closeBlueMessageWindow(browser);
+			OOGraphene.waitElement(memberMenuItem, 2, browser);
 		}
 		
 		if(waitingList) {
 			By showWaitingListBy = By.cssSelector(".o_sel_group_show_waiting_list input[type='checkbox']");
 			browser.findElement(showWaitingListBy).click();
 			OOGraphene.waitBusy(browser);
-			OOGraphene.closeBlueMessageWindow(browser);
+			OOGraphene.waitElement(memberMenuItem, 2, browser);
 		}
 		
 		OOGraphene.waitBusy(browser);
-		OOGraphene.closeBlueMessageWindow(browser);
 		return this;
 	}
 	
@@ -276,9 +276,7 @@ public class GroupPage {
 	public GroupPage assertParticipantList() {
 		By participantListBy = By.id("o_sel_group_participants");
 		List<WebElement> participantListEl = browser.findElements(participantListBy);
-		if(participantListEl.size() == 0) {
-			System.out.println();
-		}
+		Assert.assertFalse(participantListEl.isEmpty());
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/selenium/page/user/UserAdminPage.java b/src/test/java/org/olat/selenium/page/user/UserAdminPage.java
index 1a0628b43c35f1a7cc57d8151c75e79dbdeb0dce..3a502c369903ccb9ca77e4eddfa1ba2647111a62 100644
--- a/src/test/java/org/olat/selenium/page/user/UserAdminPage.java
+++ b/src/test/java/org/olat/selenium/page/user/UserAdminPage.java
@@ -123,6 +123,7 @@ public class UserAdminPage {
 		By saveBy = By.cssSelector(".o_sel_id_create button.btn-primary");
 		browser.findElement(saveBy).click();
 		OOGraphene.waitBusy(browser);
+		OOGraphene.waitAndCloseBlueMessageWindow(browser);
 		return this;
 	}
 	
diff --git a/src/test/java/org/olat/test/rest/UserRestClient.java b/src/test/java/org/olat/test/rest/UserRestClient.java
index 6cd270ad104bb3eb03d11f5576fa55ae652615f8..01f14fa46afc1b55c5e4bd3e12e42dcde7eea1fc 100644
--- a/src/test/java/org/olat/test/rest/UserRestClient.java
+++ b/src/test/java/org/olat/test/rest/UserRestClient.java
@@ -111,7 +111,7 @@ public class UserRestClient {
 		
 		UserVO vo = new UserVO();
 		String rndUsername = (name + "-" + uuid).substring(0, 24);
-		vo.setLogin(rndUsername);
+		vo.setLogin(rndUsername.toLowerCase());
 		String rndPassword = ("passwd-" + uuid).substring(0, 24);
 		vo.setPassword(rndPassword);
 		vo.setFirstName(name + "-"+ role + "-" + uuid);