diff --git a/src/main/java/org/olat/modules/fo/export/FinishCallback.java b/src/main/java/org/olat/modules/fo/export/FinishCallback.java
index 08f91424678d1ba9bc3c2f17226715cf3ce33cbd..513b04dc3effa01610795ad0e9febd3c90b2f017 100644
--- a/src/main/java/org/olat/modules/fo/export/FinishCallback.java
+++ b/src/main/java/org/olat/modules/fo/export/FinishCallback.java
@@ -63,26 +63,25 @@ public class FinishCallback implements StepRunnerCallback {
 		mailService = CoreSpringFactory.getImpl(MailManager.class);		
 	}
 
-
 	@Override
 	public Step execute(UserRequest ureq, WindowControl wControl, StepsRunContext runContext) {
-		FOCourseNode node = (FOCourseNode)runContext.get(SendMailStepForm.FORUM);
+		FOCourseNode targetNode = (FOCourseNode)runContext.get(SendMailStepForm.FORUM);
 		ICourse course = (ICourse)runContext.get(SendMailStepForm.ICOURSE);
 		CourseEnvironment courseEnv = course.getCourseEnvironment();
-		Forum chosenforum = node.loadOrCreateForum(courseEnv);
-		Message msg = (Message)runContext.get(SendMailStepForm.MESSAGE_TO_MOVE);
-		msg = forumManager.getMessageById(msg.getKey());
+		Forum chosenforum = targetNode.loadOrCreateForum(courseEnv);
+		Message msgToMove = (Message)runContext.get(SendMailStepForm.MESSAGE_TO_MOVE);
+		msgToMove = forumManager.getMessageById(msgToMove.getKey());
 		Message parentMessage = (Message)runContext.get(SendMailStepForm.PARENT_MESSAGE);	
 		if (parentMessage!= null) {
 			parentMessage = forumManager.getMessageById(parentMessage.getKey());
 		}
-		if (msg.getParentKey() == null && msg.getThreadtop() == null) {
-			msg = forumManager.createOrAppendThreadInAnotherForum(msg, chosenforum, parentMessage);
+		if (msgToMove.getParentKey() == null && msgToMove.getThreadtop() == null) {
+			forumManager.createOrAppendThreadInAnotherForum(msgToMove, chosenforum, parentMessage);
 		} else {
-			msg = forumManager.moveMessageToAnotherForum(msg, chosenforum, parentMessage);		
+			forumManager.moveMessageToAnotherForum(msgToMove, chosenforum, parentMessage);		
 		}
 		DBFactory.getInstance().commit();//commit before sending event
-		if ((Boolean)runContext.get(SendMailStepForm.SENDMAIL)) {
+		if (((Boolean)runContext.get(SendMailStepForm.SENDMAIL)).booleanValue()) {
 			sendMail(ureq, wControl, runContext);
 		}
 		return StepsMainRunController.DONE_MODIFIED;
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 23762952375720e3f3a46e700f8bfc0b5e10ae80..a183d309e4cd209cc419011b662d9063846dda21 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
@@ -3,8 +3,8 @@ step.select.forum=Forum ausw\u00E4hlen
 step.select.thread=Diskussionsfaden ausw\u00E4hlen
 step.select.comment=Kommentar ausw\u00E4hlen
 step.send.mail=Mail verschicken
-forum.select=select
-forum.forum=forum
+forum.select=Ausw\u00E4hlen
+forum.forum=Forum
 forum.thread=Diskussionsfaden
 forum.comment=Beitrag
 many.children.move=\n{0} Antworten werden mitverschoben.
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 614812011b441eaba5e9848481ff974d6a8a3cc9..68894a3e09d1a56b260067bfa40d4ed2b5684099 100644
--- a/src/main/java/org/olat/modules/fo/ui/MessageListController.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageListController.java
@@ -37,6 +37,7 @@ import org.olat.core.commons.services.mark.MarkResourceStat;
 import org.olat.core.commons.services.mark.MarkingService;
 import org.olat.core.commons.services.mark.impl.ui.MarkedEvent;
 import org.olat.core.commons.services.mark.impl.ui.UnmarkedEvent;
+import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.commons.services.vfs.VFSMetadata;
 import org.olat.core.commons.services.vfs.VFSRepositoryService;
 import org.olat.core.dispatcher.mapper.Mapper;
@@ -207,7 +208,7 @@ public class MessageListController extends BasicController implements GenericEve
 		mainVC = createVelocityContainer("threadview");
 		mainVC.contextPut("threadMode", Boolean.TRUE);
 		mainVC.contextPut("thumbMapper", thumbnailMapper);
-		mainVC.contextPut("guestOnly", new Boolean(guestOnly));
+		mainVC.contextPut("guestOnly", Boolean.valueOf(guestOnly));
 		
 		messageTableCtrl = new ForumMessageListController(ureq, getWindowControl(), forum, false, true, true);
 		listenTo(messageTableCtrl);
@@ -557,7 +558,7 @@ public class MessageListController extends BasicController implements GenericEve
 			orderedList.add(message.getMessage());
 		}
 		List<MessageNode> children = message.getChildren();
-		if(children.size() > 0) {
+		if(!children.isEmpty()) {
 			if(children.size() > 1) {
 				Collections.sort(children);
 			}
@@ -816,8 +817,8 @@ public class MessageListController extends BasicController implements GenericEve
 	private void doDeliverAttachment(UserRequest ureq, String cmd) {
 		MediaResource res = null;
 		try {
-			int index = cmd.lastIndexOf("_");
-			String attachmentPosition = cmd.substring(cmd.indexOf("_") + 1, index);
+			int index = cmd.lastIndexOf('_');
+			String attachmentPosition = cmd.substring(cmd.indexOf('_') + 1, index);
 			String messageKey = cmd.substring(index + 1);
 			
 			int position = Integer.parseInt(attachmentPosition);
@@ -1284,7 +1285,7 @@ public class MessageListController extends BasicController implements GenericEve
 		mainVC.contextPut("mode", "one");
 		mainVC.contextPut("threadMode", Boolean.FALSE);
 		
-		if(backupViews != null && backupViews.size() > 0) {
+		if(backupViews != null && !backupViews.isEmpty()) {
 			List<MessageView> oneView = new ArrayList<>(1);
 			oneView.add(backupViews.get(0));
 			mainVC.contextPut("messages", oneView);
@@ -1315,7 +1316,7 @@ public class MessageListController extends BasicController implements GenericEve
 		mainVC.contextPut("mode", "one");
 		mainVC.contextPut("threadMode", Boolean.FALSE);
 		
-		if(backupViews != null && backupViews.size() > 0) {
+		if(backupViews != null && !backupViews.isEmpty()) {
 			List<MessageView> oneView = new ArrayList<>(1);
 			for(MessageView message:backupViews) {
 				if(message.getKey().equals(messageKey)) {
@@ -1323,7 +1324,7 @@ public class MessageListController extends BasicController implements GenericEve
 				}
 			}
 			mainVC.contextPut("messages", oneView);
-			if(oneView.size() > 0) {
+			if(!oneView.isEmpty()) {
 				messageTableCtrl.setSelectView(oneView.get(0));
 			} else {
 				showWarning("error.message.deleted");
@@ -1409,18 +1410,11 @@ public class MessageListController extends BasicController implements GenericEve
 			// starting thread
 			runContext.put(SendMailStepForm.START_THREADTOP, message.getThreadtop() == null ? message : message.getThreadtop());
 			// get start course
-			PropertyManager propertyManager = PropertyManager.getInstance();
-			Long forumResourceableId = forum.getResourceableId();
-			Property forumproperty = propertyManager.getPropertyByLongValue(forumResourceableId, FOCourseNode.FORUM_KEY);
-			if (forumproperty != null) {
-				Long resourcetypeId = forumproperty.getResourceTypeId();
-				String resourcetypeName = forumproperty.getResourceTypeName();
-				OLATResourceable olatResourceable = olatManager.findResourceable(resourcetypeId, resourcetypeName);
-				RepositoryEntry startCourse = repositoryManager.lookupRepositoryEntry(olatResourceable, false);
-				if (startCourse != null) {
-					runContext.put(SendMailStepForm.START_COURSE, startCourse);
-				}
+			RepositoryEntry courseEntry = getStartCourse();
+			if(courseEntry != null) {
+				runContext.put(SendMailStepForm.START_COURSE, courseEntry);
 			}
+			
 			listenTo(exportCtrl);
 			getWindowControl().pushAsModalDialog(exportCtrl.getInitialComponent());
 		} else {
@@ -1428,6 +1422,31 @@ public class MessageListController extends BasicController implements GenericEve
 		}
 	}
 	
+	private RepositoryEntry getStartCourse() {
+		PropertyManager propertyManager = PropertyManager.getInstance();
+		Long forumResourceableId = forum.getResourceableId();
+		Property forumproperty = propertyManager.getPropertyByLongValue(forumResourceableId, FOCourseNode.FORUM_KEY);
+		if (forumproperty != null) {
+			Long resourcetypeId = forumproperty.getResourceTypeId();
+			String resourcetypeName = forumproperty.getResourceTypeName();
+			OLATResourceable olatResourceable = olatManager.findResourceable(resourcetypeId, resourcetypeName);
+			RepositoryEntry startCourse = repositoryManager.lookupRepositoryEntry(olatResourceable, false);
+			if (startCourse != null) {
+				return startCourse;
+			}
+		}
+		SubscriptionContext ctx = foCallback.getSubscriptionContext();
+		if(ctx != null && "CourseModule".equals(ctx.getResName())) {
+			OLATResourceable olatResourceable = OresHelper.createOLATResourceableInstance("CourseModule", ctx.getResId());
+			RepositoryEntry startCourse = repositoryManager.lookupRepositoryEntry(olatResourceable, false);
+			if (startCourse != null) {
+				return startCourse;
+			}
+		}
+		
+		return null;
+	}
+	
 	private void doFinalizeMove(UserRequest ureq, MessageView messageToMove, Long parentMessageKey) {
 		if (foCallback.mayEditMessageAsModerator()) {
 			Message message = forumManager.getMessageById(messageToMove.getKey());
@@ -1445,12 +1464,8 @@ public class MessageListController extends BasicController implements GenericEve
 	}
 	
 	private void doOpenVisitingCard(UserRequest ureq, Identity creator) {
-		ControllerCreator userInfoMainControllerCreator = new ControllerCreator() {
-			@Override
-			public Controller createController(UserRequest lureq, WindowControl lwControl) {
-				return new UserInfoMainController(lureq, lwControl, creator, true, false);
-			}					
-		};
+		ControllerCreator userInfoMainControllerCreator = (lureq, lwControl)
+				-> new UserInfoMainController(lureq, lwControl, creator, true, false);
 		//wrap the content controller into a full header layout
 		ControllerCreator layoutCtrlr = BaseFullWebappPopupLayoutFactory.createAuthMinimalPopupLayout(ureq, userInfoMainControllerCreator);
 		PopupBrowserWindow pbw = getWindowControl().getWindowBackOffice().getWindowManager().createNewPopupBrowserWindowFor(ureq, layoutCtrlr);
diff --git a/src/main/java/org/olat/modules/fo/ui/_content/threadview.html b/src/main/java/org/olat/modules/fo/ui/_content/threadview.html
index 75db1e12db6de48a999dc14a642858236aea4c64..660a24241b09973652e5302fe9e15d8e3b15bb42 100644
--- a/src/main/java/org/olat/modules/fo/ui/_content/threadview.html
+++ b/src/main/java/org/olat/modules/fo/ui/_content/threadview.html
@@ -146,9 +146,8 @@
 			
 			#if($r.available("exile_${message.key}"))
 			<div class="btn-group">
-				<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
-					<i class="o_icon o_icon-fw o_icon_actions"></i>
-					<span class="caret"></span>
+				<button type="button" class="btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown">
+					<i class="o_icon o_icon-fw o_icon_actions"> </i><span class="caret"> </span>
 				</button>
 				<ul class="dropdown-menu dropdown-menu-right">
 					#if($r.available("split_${message.key}"))