diff --git a/src/main/java/org/olat/modules/fo/export/SendMailStepForm.java b/src/main/java/org/olat/modules/fo/export/SendMailStepForm.java
index 57f73b5bb099ffd6dc20bdfda01b73a50939d190..ad4277693350bd34916c1280c896b92b2fc47ceb 100644
--- a/src/main/java/org/olat/modules/fo/export/SendMailStepForm.java
+++ b/src/main/java/org/olat/modules/fo/export/SendMailStepForm.java
@@ -20,9 +20,11 @@
 package org.olat.modules.fo.export;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.velocity.VelocityContext;
@@ -77,6 +79,7 @@ public class SendMailStepForm extends StepFormBasicController {
 	private Message startMessage, parentMessage;
 	
 	private List<Identity> threadMembers;
+	private Map<Identity, String> pseudonymes;
 	
 	private String targetForum, targetCourseTitle, startMessageTitle;
 	
@@ -136,10 +139,21 @@ public class SendMailStepForm extends StepFormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		String members = displayThreadMembers();
-		FormLayoutContainer recipientsContainer = FormLayoutContainer.createDefaultFormLayout("recipients", getTranslator());
-		formLayout.add(recipientsContainer);
-		recipientsContainer.setRootForm(mainForm);
-		uifactory.addStaticTextElement("sendmail.recipients", members, recipientsContainer);
+		// summary
+		String summary = translate("thread.moving.info", new String[]{startMessageTitle, targetForum, targetCourseTitle});
+		Set<Long> messageKeys = new HashSet<>();
+		forumManager.countMessageChildrenRecursively(startMessage, messageKeys);
+		int childrenCount = messageKeys.size();
+		if (childrenCount > 0) {
+			summary += childrenCount > 1 ? translate("many.children.move", String.valueOf(childrenCount)) : translate("one.child.move") ;
+		}
+		FormLayoutContainer infoContainer = FormLayoutContainer.createDefaultFormLayout("summary", getTranslator());
+		formLayout.add(infoContainer);
+		infoContainer.setRootForm(mainForm);
+		uifactory.addStaticTextElement("thread.moved.summary", summary, infoContainer);
+		// members
+		uifactory.addStaticTextElement("sendmail.recipients", members, infoContainer);
+		// mail template
 		formLayout.add(templateForm.getInitialFormItem());
 	}
 	
@@ -177,27 +191,34 @@ public class SendMailStepForm extends StepFormBasicController {
 		} else {
 			addToRunContext(SENDMAIL, Boolean.FALSE);
 		}
-		showInfo("thread.moved.info", new String[]{startMessageTitle, targetForum, targetCourseTitle});
+		showInfo("thread.moved.success", new String[]{startMessageTitle, targetForum, targetCourseTitle});
 		fireEvent(ureq, StepsEvent.ACTIVATE_NEXT);
 	}
 	
 	private List<Identity> collectCreators () {
+		pseudonymes = new HashMap<>();
 		Set<Identity> threadMemberSet = new HashSet<>();
 		// inform start message (thread top)
-		Identity creator = startMessage.getCreator();
-		if (creator != null) {
-			threadMemberSet.add(creator);
-		}
-		Identity modifier = startMessage.getModifier();
-		if (modifier != null) {
-			threadMemberSet.add(modifier);
+		if (!startMessage.isGuest()) {
+			Identity creator = startMessage.getCreator();
+			if (creator != null) {
+				threadMemberSet.add(creator);
+				String pseudonym = startMessage.getPseudonym();
+				if(pseudonym != null) {
+					pseudonymes.put(creator, pseudonym);
+				}
+			}
+			Identity modifier = startMessage.getModifier();
+			if (modifier != null) {
+				threadMemberSet.add(modifier);
+			}
 		}
 		// send copy of email to sender
 		if (templateForm != null && templateForm.isCCSenderSelected()) {
 			threadMemberSet.add(getIdentity());
 		}
 		// inform children
-		forumManager.collectThreadMembersRecursively(startMessage, threadMemberSet);
+		forumManager.collectThreadMembersRecursively(startMessage, threadMemberSet, pseudonymes);
 		
 		return new ArrayList<Identity>(threadMemberSet);
 	}
@@ -208,8 +229,12 @@ public class SendMailStepForm extends StepFormBasicController {
 		Iterator<Identity> listIterator = threadMembers.iterator();
 		while(listIterator.hasNext()) {
 			Identity identity = listIterator.next();
-			String displayName = userManager.getUserDisplayName(identity);
-			sb.append(displayName);
+			if (pseudonymes.containsKey(identity)) {
+				sb.append(pseudonymes.get(identity));
+			} else {
+				String displayName = userManager.getUserDisplayName(identity);
+				sb.append(displayName);
+			}
 			if (listIterator.hasNext()) {
 				sb.append("; ");
 			}
diff --git a/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties
index 76b628f8e4e5d6e0c6b35247542bfd1313c25375..23762952375720e3f3a46e700f8bfc0b5e10ae80 100644
--- a/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_de.properties
@@ -7,8 +7,12 @@ forum.select=select
 forum.forum=forum
 forum.thread=Diskussionsfaden
 forum.comment=Beitrag
-thread.moved.info=Diskussionsfaden "{0}" wurde ins Forum "{1}" von Kurs "{2}" verschoben
-sendmail.recipients=Empf\u00E4nger
+many.children.move=\n{0} Antworten werden mitverschoben.
+one.child.move=\nEine Antwort wird mitverschoben.
+thread.moving.info=Diskussionsfaden "{0}" wird ins Forum "{1}" von Kurs "{2}" verschoben.
+thread.moved.success=Diskussionsfaden "{0}" wurde erfolgreich ins Forum "{1}" von Kurs "{2}" verschoben
+thread.moved.summary=Zusammenfassung
+sendmail.recipients=Betroffene Benutzer
 link.new.thread=Als neuen Diskussionsfaden anlegen
 radio.foreign.course={0} in ein Forum eines anderen Kurses verschieben
 radio.same.course={0} in ein Forum im gleichen Kurs verschieben
diff --git a/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_en.properties
index 445c4ca087afd7d65a4f008dda341984e4014f63..91cb592767f920b6c8b9e81aafe28d2b51bf7f9a 100644
--- a/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/fo/export/_i18n/LocalStrings_en.properties
@@ -7,8 +7,12 @@ forum.select=Select
 forum.forum=Forum
 forum.thread=Thread
 forum.comment=Comment
-thread.moved.info=Thread "{0}" was moved to Forum "{1}" in course "{2}"
-sendmail.recipients=Recipients
+many.children.move=\n{0} answers are moved along.
+one.child.move=\nOne answer is moved along.
+thread.moving.info=Thread "{0}" is moved to Forum "{1}" in course "{2}".
+thread.moved.success=Thread "{0}" was moved to Forum "{1}" in course "{2}" successfully.
+thread.moved.summary=Summary
+sendmail.recipients=Affected users
 link.new.thread=Add as new Thread
 radio.foreign.course=Move {0} in forum of another course
 radio.same.course=Move {0} in forum same course
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 8abed75cdc63c0b1e97d3b0d1e55c956c92fa937..43c26b7535e513ed3a18999685eca4998a808810 100644
--- a/src/main/java/org/olat/modules/fo/manager/ForumManager.java
+++ b/src/main/java/org/olat/modules/fo/manager/ForumManager.java
@@ -27,6 +27,7 @@ package org.olat.modules.fo.manager;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -918,6 +919,16 @@ public class ForumManager {
 				.getResultList();
 		return count == null || count.isEmpty() || count.get(0) == null ? 0 : count.get(0).intValue();
 	}
+	
+	public void countMessageChildrenRecursively(Message message, Set<Long> messageKeys) {
+		List<Message> children = getMessageChildren(message);
+		for (Message child : children) {
+			messageKeys.add(child.getKey());
+			if (hasChildren(child)){
+				countMessageChildrenRecursively(child, messageKeys);
+			}
+		}	
+	}
 
 	/**
 	 * deletes entry of one message
@@ -1073,19 +1084,43 @@ public class ForumManager {
 	 * @param oldParent
 	 * @param setOfIdentity 
 	 */
-	public void collectThreadMembersRecursively(Message oldParent, Set<Identity> setOfIdentity) {
+	public void collectThreadMembersRecursively(Message oldParent, Set<Identity> setOfIdentity, Map<Identity, String> pseudonymes) {
 		List<Message> children = getMessageChildren(oldParent);
-		for (Message child : children) {
-			Identity creator = child.getCreator();
-			if (creator != null) {
-				setOfIdentity.add(creator);
+		children.sort(new Comparator<Message>() {
+			@Override
+			public int compare(Message o1, Message o2) {
+				if (o1 == null) return 1;
+				if (o2 == null) return -1;
+				// move posts with pseudonyms toward low indices in list
+				if (o1.getPseudonym() == null && o2.getPseudonym() != null) {
+					return 1;
+				} else if (o1.getPseudonym() != null && o2.getPseudonym() == null) {
+					return -1;
+				} else {
+					return o1.getCreationDate().compareTo(o2.getCreationDate());
+				}
 			}
-			Identity modifier = child.getModifier();
-			if (modifier != null) {
-				setOfIdentity.add(modifier);
+		});
+		for (Message child : children) {
+			if (!child.isGuest()) {
+				Identity creator = child.getCreator();
+				if (creator != null) {
+					setOfIdentity.add(creator);
+					String pseudonym = child.getPseudonym();
+					if(pseudonym != null) {
+						pseudonymes.put(creator, pseudonym);
+					} else if (pseudonymes.containsKey(creator)) {
+						// remove entry if thread also contains same identity without pseudonym 
+						pseudonymes.remove(creator);
+					}
+				}
+				Identity modifier = child.getModifier();
+				if (creator != null && modifier != null) {
+					setOfIdentity.add(modifier);
+				}
 			}
 			if (hasChildren(child)) {
-				collectThreadMembersRecursively(child, setOfIdentity);
+				collectThreadMembersRecursively(child, setOfIdentity, pseudonymes);
 			}			
 		}
 	}