diff --git a/src/main/java/org/olat/course/nodes/FOCourseNode.java b/src/main/java/org/olat/course/nodes/FOCourseNode.java
index 66527f33abb7f3e4ce9accda16d4c8bf7e0cf8b5..f7ea0c5d52dd11048a43d1d5fbab1a7131b76c7e 100644
--- a/src/main/java/org/olat/course/nodes/FOCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/FOCourseNode.java
@@ -58,6 +58,7 @@ import org.olat.course.ICourse;
 import org.olat.course.condition.Condition;
 import org.olat.course.condition.interpreter.ConditionExpression;
 import org.olat.course.condition.interpreter.ConditionInterpreter;
+import org.olat.course.editor.ConditionAccessEditConfig;
 import org.olat.course.editor.CourseEditorEnv;
 import org.olat.course.editor.NodeEditController;
 import org.olat.course.editor.StatusDescription;
@@ -87,47 +88,52 @@ import org.olat.repository.RepositoryEntry;
  * Initial Date: Feb 9, 2004
  * 
  * @author Mike Stock Comment:
- * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen GmbH</a>)
+ * @author BPS (<a href="http://www.bps-system.de/">BPS Bildungsportal Sachsen
+ *         GmbH</a>)
  */
 public class FOCourseNode extends AbstractAccessableCourseNode {
-	
+
 	private static final Logger log = Tracing.createLoggerFor(FOCourseNode.class);
 
 	private static final long serialVersionUID = 2281715263255594865L;
-	
+
 	@SuppressWarnings("deprecation")
 	private static final String PACKAGE_FO = Util.getPackageName(FOCourseNodeRunController.class);
 
 	private static final String TYPE = "fo";
-	
+
 	private static final int CURRENT_VERSION = 4;
 	public static final String CONFIG_FORUM_KEY = "forumKey";
 	public static final String CONFIG_PSEUDONYM_POST_ALLOWED = "pseudonym.post.allowed";
 	public static final String CONFIG_PSEUDONYM_POST_DEFAULT = "pseudonym.post.default";
+	public static final String CONFIG_COACH_MODERATE_ALLOWED = "coach.moderate.allowed";
+	public static final String CONFIG_COACH_POST_ALLOWED = "coach.post.allowed";
+	public static final String CONFIG_PARTICIPANT_POST_ALLOWED = "participant.post.allowed";
 	public static final String CONFIG_GUEST_POST_ALLOWED = "guest.post.allowed";
 
 	// null means no precondition / always accessible
 	private Condition preConditionReader, preConditionPoster, preConditionModerator;
-	
-	
+
 	public FOCourseNode() {
 		super(TYPE);
 		updateModuleConfigDefaults(true);
-		// restrict moderator access to course admins and course coaches
-		preConditionModerator = getPreConditionModerator();
-		preConditionModerator.setEasyModeCoachesAndAdmins(true);
-		preConditionModerator.setConditionExpression(preConditionModerator.getConditionFromEasyModeConfiguration());
-		preConditionModerator.setExpertMode(false);
 	}
 
 	@Override
-	public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel, ICourse course, UserCourseEnvironment euce) {
+	public TabbableController createEditController(UserRequest ureq, WindowControl wControl, BreadcrumbPanel stackPanel,
+			ICourse course, UserCourseEnvironment euce) {
 		updateModuleConfigDefaults(false);
 		FOCourseNodeEditController childTabCntrllr = new FOCourseNodeEditController(ureq, wControl, this, course, euce);
-		CourseNode chosenNode = course.getEditorTreeModel().getCourseNode(euce.getCourseEditorEnv().getCurrentCourseNodeId());
+		CourseNode chosenNode = course.getEditorTreeModel()
+				.getCourseNode(euce.getCourseEditorEnv().getCurrentCourseNodeId());
 		return new NodeEditController(ureq, wControl, course, chosenNode, euce, childTabCntrllr);
 	}
 
+	@Override
+	public ConditionAccessEditConfig getAccessEditConfig() {
+		return hasCustomPreConditions() ? ConditionAccessEditConfig.custom() : ConditionAccessEditConfig.regular(false);
+	}
+
 	@Override
 	public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl,
 			final UserCourseEnvironment userCourseEnv, CourseNodeSecurityCallback nodeSecCallback, String nodecmd) {
@@ -140,8 +146,8 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		if (nodecmd != null) {
 			try {
 				Long messageId = Long.valueOf(nodecmd);
-				BusinessControlFactory bcf =  BusinessControlFactory.getInstance();
-				BusinessControl businessControl = bcf.createFromString("[Message:"+messageId+"]");
+				BusinessControlFactory bcf = BusinessControlFactory.getInstance();
+				BusinessControl businessControl = bcf.createFromString("[Message:" + messageId + "]");
 				wControl = bcf.createBusinessWindowControl(businessControl, wControl);
 			} catch (NumberFormatException e) {
 				// ups, nodecmd is not a message, what the heck is it then?
@@ -149,32 +155,54 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 			}
 		}
 
-		//for guests, check if posting is allowed
+		// for guests, check if posting is allowed
 		boolean pseudonymPostAllowed = false;
 		boolean defaultPseudonym = false;
 		boolean guestPostAllowed = false;
-		if(roles.isGuestOnly()) {
+		if (roles.isGuestOnly()) {
 			String config = getModuleConfiguration().getStringValue(CONFIG_GUEST_POST_ALLOWED);
 			guestPostAllowed = "true".equals(config);
 		} else {
 			ForumModule forumModule = CoreSpringFactory.getImpl(ForumModule.class);
 			String config = getModuleConfiguration().getStringValue(CONFIG_PSEUDONYM_POST_ALLOWED);
 			pseudonymPostAllowed = forumModule.isAnonymousPostingWithPseudonymEnabled() && "true".equals(config);
-			if(pseudonymPostAllowed) {
+			if (pseudonymPostAllowed) {
 				defaultPseudonym = getModuleConfiguration().getBooleanSafe(CONFIG_PSEUDONYM_POST_DEFAULT,
 						forumModule.isPseudonymForMessageEnabledByDefault());
 			}
 		}
 		// Create subscription context and run controller
-		SubscriptionContext forumSubContext = CourseModule.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), this);
+		SubscriptionContext forumSubContext = CourseModule
+				.createSubscriptionContext(userCourseEnv.getCourseEnvironment(), this);
+		boolean moderator = isModerator(userCourseEnv, nodeSecCallback.getNodeEvaluation());
+		boolean poster = isPoster(userCourseEnv, nodeSecCallback.getNodeEvaluation());
 		ForumCallback foCallback = userCourseEnv.isCourseReadOnly()
-				? new ReadOnlyForumCallback(nodeSecCallback.getNodeEvaluation(), isAdministrator, isGuestOnly)
-				: new ForumNodeForumCallback(nodeSecCallback.getNodeEvaluation(), isAdministrator, isGuestOnly,
-						guestPostAllowed, pseudonymPostAllowed, defaultPseudonym, forumSubContext);
+				? new ReadOnlyForumCallback(moderator, isAdministrator, isGuestOnly)
+				: new ForumNodeForumCallback(poster, moderator, isAdministrator, isGuestOnly, guestPostAllowed,
+						pseudonymPostAllowed, defaultPseudonym, forumSubContext);
 		FOCourseNodeRunController forumC = new FOCourseNodeRunController(ureq, wControl, theForum, foCallback, this);
 		return new NodeRunConstructionResult(forumC);
 	}
 
+	private boolean isModerator(UserCourseEnvironment userCourseEnv, NodeEvaluation ne) {
+		if (hasCustomPreConditions()) {
+			return ne != null? ne.isCapabilityAccessible("moderator"): false;
+		} else if (getModuleConfiguration().getBooleanSafe(CONFIG_COACH_MODERATE_ALLOWED) && userCourseEnv.isCoach()) {
+			return true;
+		}
+		return false;
+	}
+	
+	public boolean isPoster(UserCourseEnvironment userCourseEnv, NodeEvaluation ne) {
+		if (hasCustomPreConditions()) {
+			return ne != null ? ne.isCapabilityAccessible("poster") : false;
+		} else if ((getModuleConfiguration().getBooleanSafe(CONFIG_COACH_POST_ALLOWED) && userCourseEnv.isCoach())
+				|| (getModuleConfiguration().getBooleanSafe(CONFIG_PARTICIPANT_POST_ALLOWED) && userCourseEnv.isParticipant())) {
+			return true;
+		}
+		return false;
+	}
+
 	/**
 	 * Private helper method to load the forum from the configuration or create on
 	 * if it does not yet exist
@@ -183,119 +211,135 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	 * @return the loaded forum
 	 */
 	public Forum loadOrCreateForum(final CourseEnvironment courseEnv) {
-		updateModuleConfigDefaults(false);				
+		updateModuleConfigDefaults(false);
 
-		Forum forum = null;	
-		List<Property> forumKeyProps = courseEnv.getCoursePropertyManager()
-				.findCourseNodeProperties(this, null, null, CONFIG_FORUM_KEY);
-		if(forumKeyProps == null || forumKeyProps.isEmpty()) {
+		Forum forum = null;
+		List<Property> forumKeyProps = courseEnv.getCoursePropertyManager().findCourseNodeProperties(this, null, null,
+				CONFIG_FORUM_KEY);
+		if (forumKeyProps == null || forumKeyProps.isEmpty()) {
 			forum = createForum(courseEnv);
-		} else if(forumKeyProps.size() == 1) {
+		} else if (forumKeyProps.size() == 1) {
 			forum = loadForum(courseEnv, forumKeyProps.get(0));
 		} else if (forumKeyProps.size() > 1) {
 			forum = saveMultiForums(courseEnv);
 		}
 		return forum;
 	}
-	
+
 	private Forum saveMultiForums(final CourseEnvironment courseEnv) {
 		final ForumManager fom = CoreSpringFactory.getImpl(ForumManager.class);
-		final OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(FOCourseNode.class, Long.valueOf(getIdent()));
-		return CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerCallback<Forum>(){
-			@Override
-			public Forum execute() {
-				List<Property> forumKeyProps = courseEnv.getCoursePropertyManager()
-						.findCourseNodeProperties(FOCourseNode.this, null, null, CONFIG_FORUM_KEY);
-				Forum masterForum;
-				if(forumKeyProps.size() == 1) {
-					masterForum = loadForum(courseEnv, forumKeyProps.get(0));
-				} else if(forumKeyProps.size() > 1) {
-					Long masterForumKey = forumKeyProps.get(0).getLongValue();
-					List<Long> forumsToMerge = new ArrayList<>();
-					for(int i=1; i<forumKeyProps.size(); i++) {
-						forumsToMerge.add(forumKeyProps.get(i).getLongValue());
-					}
-					fom.mergeForums(masterForumKey, forumsToMerge);
-					masterForum = fom.loadForum(masterForumKey);
-					for(int i=1; i<forumKeyProps.size(); i++) {
-						courseEnv.getCoursePropertyManager().deleteProperty(forumKeyProps.get(i));
+		final OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(FOCourseNode.class,
+				Long.valueOf(getIdent()));
+		return CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable,
+				new SyncerCallback<Forum>() {
+					@Override
+					public Forum execute() {
+						List<Property> forumKeyProps = courseEnv.getCoursePropertyManager()
+								.findCourseNodeProperties(FOCourseNode.this, null, null, CONFIG_FORUM_KEY);
+						Forum masterForum;
+						if (forumKeyProps.size() == 1) {
+							masterForum = loadForum(courseEnv, forumKeyProps.get(0));
+						} else if (forumKeyProps.size() > 1) {
+							Long masterForumKey = forumKeyProps.get(0).getLongValue();
+							List<Long> forumsToMerge = new ArrayList<>();
+							for (int i = 1; i < forumKeyProps.size(); i++) {
+								forumsToMerge.add(forumKeyProps.get(i).getLongValue());
+							}
+							fom.mergeForums(masterForumKey, forumsToMerge);
+							masterForum = fom.loadForum(masterForumKey);
+							for (int i = 1; i < forumKeyProps.size(); i++) {
+								courseEnv.getCoursePropertyManager().deleteProperty(forumKeyProps.get(i));
+							}
+						} else {
+							masterForum = null;
+						}
+						return masterForum;
 					}
-				} else {
-					masterForum = null;
-				}
-				return masterForum;
-			}
-		});
+				});
 	}
-	
+
 	private Forum loadForum(CourseEnvironment courseEnv, Property prop) {
 		final ForumManager fom = CoreSpringFactory.getImpl(ForumManager.class);
 		Long forumKey = prop.getLongValue();
 		Forum forum = fom.loadForum(forumKey);
 		if (forum == null) {
-			throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course "
-					+ courseEnv.getCourseResourceableId() + " for node " + getIdent()
-					+ " as defined in course node property but forum manager could not load forum.", null);
+			throw new OLATRuntimeException(FOCourseNode.class,
+					"Tried to load forum with key " + forumKey.longValue() + " in course "
+							+ courseEnv.getCourseResourceableId() + " for node " + getIdent()
+							+ " as defined in course node property but forum manager could not load forum.",
+					null);
 		}
 		return forum;
 	}
-	
+
 	private Forum createForum(final CourseEnvironment courseEnv) {
 		final ForumManager fom = CoreSpringFactory.getImpl(ForumManager.class);
-		//creates resourceable from FOCourseNode.class and the current node id as key
-		OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(FOCourseNode.class, new Long(getIdent()));
-		//o_clusterOK by:ld 
-		return CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable, new SyncerCallback<Forum>(){
-			@Override
-			public Forum execute() {
-				Forum forum;
-				CoursePropertyManager cpm = courseEnv.getCoursePropertyManager();
-				Property forumKeyProperty = cpm.findCourseNodeProperty(FOCourseNode.this, null, null, CONFIG_FORUM_KEY);
-				if (forumKeyProperty == null) {
-					// First call of forum, create new forum and save forum key as property
-					forum = fom.addAForum();
-					Long forumKey = forum.getKey();
-					forumKeyProperty = cpm.createCourseNodePropertyInstance(FOCourseNode.this, null, null, CONFIG_FORUM_KEY, null, forumKey, null, null);
-					cpm.saveProperty(forumKeyProperty);	
-				} else {
-					// Forum does already exist, load forum with key from properties
-					Long forumKey = forumKeyProperty.getLongValue();
-					forum = fom.loadForum(forumKey);
-					if (forum == null) {
-						throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key " + forumKey.longValue() + " in course "
-								+ courseEnv.getCourseResourceableId() + " for node " + getIdent()
-								+ " as defined in course node property but forum manager could not load forum.", null);
+		// creates resourceable from FOCourseNode.class and the current node id as key
+		OLATResourceable courseNodeResourceable = OresHelper.createOLATResourceableInstance(FOCourseNode.class,
+				new Long(getIdent()));
+		// o_clusterOK by:ld
+		return CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync(courseNodeResourceable,
+				new SyncerCallback<Forum>() {
+					@Override
+					public Forum execute() {
+						Forum forum;
+						CoursePropertyManager cpm = courseEnv.getCoursePropertyManager();
+						Property forumKeyProperty = cpm.findCourseNodeProperty(FOCourseNode.this, null, null,
+								CONFIG_FORUM_KEY);
+						if (forumKeyProperty == null) {
+							// First call of forum, create new forum and save forum key as property
+							forum = fom.addAForum();
+							Long forumKey = forum.getKey();
+							forumKeyProperty = cpm.createCourseNodePropertyInstance(FOCourseNode.this, null, null,
+									CONFIG_FORUM_KEY, null, forumKey, null, null);
+							cpm.saveProperty(forumKeyProperty);
+						} else {
+							// Forum does already exist, load forum with key from properties
+							Long forumKey = forumKeyProperty.getLongValue();
+							forum = fom.loadForum(forumKey);
+							if (forum == null) {
+								throw new OLATRuntimeException(FOCourseNode.class, "Tried to load forum with key "
+										+ forumKey.longValue() + " in course " + courseEnv.getCourseResourceableId()
+										+ " for node " + getIdent()
+										+ " as defined in course node property but forum manager could not load forum.",
+										null);
+							}
+						}
+						return forum;
 					}
-				}
-				return forum;
-			}
-		});
+				});
 	}
 
 	@Override
 	public void calcAccessAndVisibility(ConditionInterpreter ci, NodeEvaluation nodeEval) {
-		// evaluate the preconditions
-		boolean reader = (getPreConditionReader().getConditionExpression() == null ? true : ci.evaluateCondition(getPreConditionReader()));
-		nodeEval.putAccessStatus("reader", reader);
-		boolean poster = (getPreConditionPoster().getConditionExpression() == null ? true : ci.evaluateCondition(getPreConditionPoster()));
-		nodeEval.putAccessStatus("poster", poster);
-		boolean moderator = (getPreConditionModerator().getConditionExpression() == null ? true : ci
-				.evaluateCondition(getPreConditionModerator()));
-		nodeEval.putAccessStatus("moderator", moderator);
-
-		boolean visible = (getPreConditionVisibility().getConditionExpression() == null ? true : ci
-				.evaluateCondition(getPreConditionVisibility()));
-		nodeEval.setVisible(visible);
+		if (hasCustomPreConditions()) {
+			boolean reader = (getPreConditionReader().getConditionExpression() == null ? true
+					: ci.evaluateCondition(getPreConditionReader()));
+			nodeEval.putAccessStatus("reader", reader);
+			boolean poster = (getPreConditionPoster().getConditionExpression() == null ? true
+					: ci.evaluateCondition(getPreConditionPoster()));
+			nodeEval.putAccessStatus("poster", poster);
+			boolean moderator = (getPreConditionModerator().getConditionExpression() == null ? true
+					: ci.evaluateCondition(getPreConditionModerator()));
+			nodeEval.putAccessStatus("moderator", moderator);
+
+			boolean visible = (getPreConditionVisibility().getConditionExpression() == null ? true
+					: ci.evaluateCondition(getPreConditionVisibility()));
+			nodeEval.setVisible(visible);
+		} else {
+			super.calcAccessAndVisibility(ci, nodeEval);
+		}
 	}
 
 	@Override
-	public Controller createPreviewController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv, CourseNodeSecurityCallback nodeSecCallback) {
+	public Controller createPreviewController(UserRequest ureq, WindowControl wControl,
+			UserCourseEnvironment userCourseEnv, CourseNodeSecurityCallback nodeSecCallback) {
 		return new FOPreviewController(ureq, wControl, nodeSecCallback.getNodeEvaluation());
 	}
 
 	@Override
-	public Controller createPeekViewRunController(UserRequest ureq, WindowControl wControl, UserCourseEnvironment userCourseEnv,
-			CourseNodeSecurityCallback nodeSecCallback) {
+	public Controller createPeekViewRunController(UserRequest ureq, WindowControl wControl,
+			UserCourseEnvironment userCourseEnv, CourseNodeSecurityCallback nodeSecCallback) {
 		if (nodeSecCallback.isAccessible()) {
 			// Create a forum peekview controller that shows the latest two messages
 			Forum theForum = loadOrCreateForum(userCourseEnv.getCourseEnvironment());
@@ -307,8 +351,17 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	}
 
 	/**
-	 * @return Returns the preConditionModerator.
+	 * The conditions to control the user rights are deprecated. In new course nodes
+	 * this options are controlled by module configurations. Existing course nodes
+	 * may have preconditions. In that case they are still used for compatibility
+	 * reasons.
+	 *
+	 * @return
 	 */
+	public boolean hasCustomPreConditions() {
+		return preConditionModerator != null || preConditionPoster != null || preConditionReader != null;
+	}
+
 	public Condition getPreConditionModerator() {
 		if (preConditionModerator == null) {
 			preConditionModerator = new Condition();
@@ -317,9 +370,6 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		return preConditionModerator;
 	}
 
-	/**
-	 * @param preConditionModerator The preConditionModerator to set.
-	 */
 	public void setPreConditionModerator(Condition preConditionModerator) {
 		if (preConditionModerator == null) {
 			preConditionModerator = getPreConditionModerator();
@@ -328,9 +378,6 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		this.preConditionModerator = preConditionModerator;
 	}
 
-	/**
-	 * @return Returns the preConditionPoster.
-	 */
 	public Condition getPreConditionPoster() {
 		if (preConditionPoster == null) {
 			preConditionPoster = new Condition();
@@ -339,9 +386,6 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		return preConditionPoster;
 	}
 
-	/**
-	 * @param preConditionPoster The preConditionPoster to set.
-	 */
 	public void setPreConditionPoster(Condition preConditionPoster) {
 		if (preConditionPoster == null) {
 			preConditionPoster = getPreConditionPoster();
@@ -350,9 +394,6 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		this.preConditionPoster = preConditionPoster;
 	}
 
-	/**
-	 * @return Returns the preConditionReader.
-	 */
 	public Condition getPreConditionReader() {
 		if (preConditionReader == null) {
 			preConditionReader = new Condition();
@@ -361,9 +402,6 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 		return preConditionReader;
 	}
 
-	/**
-	 * @param preConditionReader The preConditionReader to set.
-	 */
 	public void setPreConditionReader(Condition preConditionReader) {
 		if (preConditionReader == null) {
 			preConditionReader = getPreConditionReader();
@@ -374,22 +412,23 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 
 	@Override
 	public StatusDescription isConfigValid() {
-		if(oneClickStatusCache!=null) {
+		if (oneClickStatusCache != null) {
 			return oneClickStatusCache[0];
 		}
-		
+
 		return StatusDescription.NOERROR;
 	}
 
 	@Override
 	public StatusDescription[] isConfigValid(CourseEditorEnv cev) {
 		oneClickStatusCache = null;
-		//only here we know which translator to take for translating condition error messages
+		// only here we know which translator to take for translating condition error
+		// messages
 		List<StatusDescription> sds = isConfigValidWithTranslator(cev, PACKAGE_FO, getConditionExpressions());
 		oneClickStatusCache = StatusDescriptionHelper.sort(sds);
 		return oneClickStatusCache;
 	}
-	
+
 	@Override
 	public RepositoryEntry getReferencedRepositoryEntry() {
 		return null;
@@ -401,22 +440,22 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	}
 
 	@Override
-	public boolean archiveNodeData(Locale locale, ICourse course, ArchiveOptions options,
-			ZipOutputStream exportStream, String archivePath, String charset) {
+	public boolean archiveNodeData(Locale locale, ICourse course, ArchiveOptions options, ZipOutputStream exportStream,
+			String archivePath, String charset) {
 		CoursePropertyManager cpm = course.getCourseEnvironment().getCoursePropertyManager();
 		Property forumKeyProperty = cpm.findCourseNodeProperty(this, null, null, CONFIG_FORUM_KEY);
-		if(forumKeyProperty == null) {
+		if (forumKeyProperty == null) {
 			return false;
 		}
 		Long forumKey = forumKeyProperty.getLongValue();
-		if(CoreSpringFactory.getImpl(ForumManager.class).countThreadsByForumID(forumKey) <= 0) {
+		if (CoreSpringFactory.getImpl(ForumManager.class).countThreadsByForumID(forumKey) <= 0) {
 			return false;
 		}
-		
-		String forumName = "forum_" + Formatter.makeStringFilesystemSave(getShortTitle())
-				+ "_" + Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
+
+		String forumName = "forum_" + Formatter.makeStringFilesystemSave(getShortTitle()) + "_"
+				+ Formatter.formatDatetimeFilesystemSave(new Date(System.currentTimeMillis()));
 		forumName = ZipUtil.concat(archivePath, forumName);
-		ForumStreamedRTFFormatter rtff = new ForumStreamedRTFFormatter(exportStream, forumName, false, locale);	
+		ForumStreamedRTFFormatter rtff = new ForumStreamedRTFFormatter(exportStream, forumName, false, locale);
 		CoreSpringFactory.getImpl(ForumArchiveManager.class).applyFormatter(rtff, forumKey, null);
 		return true;
 	}
@@ -425,16 +464,18 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	public String informOnDelete(Locale locale, ICourse course) {
 		CoursePropertyManager cpm = PersistingCoursePropertyManager.getInstance(course);
 		Property forumKeyProperty = cpm.findCourseNodeProperty(this, null, null, CONFIG_FORUM_KEY);
-		if (forumKeyProperty == null) return null; // no forum created yet
+		if (forumKeyProperty == null)
+			return null; // no forum created yet
 		return new PackageTranslator(PACKAGE_FO, locale).translate("warn.forumdelete");
 	}
 
 	@Override
 	public void cleanupOnDelete(ICourse course) {
 		super.cleanupOnDelete(course);
-		
+
 		// mark the subscription to this node as deleted
-		SubscriptionContext forumSubContext = CourseModule.createTechnicalSubscriptionContext(course.getCourseEnvironment(), this);
+		SubscriptionContext forumSubContext = CourseModule
+				.createTechnicalSubscriptionContext(course.getCourseEnvironment(), this);
 		NotificationsManager.getInstance().delete(forumSubContext);
 
 		// delete the forum, if there is one (is created on demand only)
@@ -448,25 +489,24 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 	}
 
 	/**
-	 * Update the module configuration to have all mandatory configuration flags
-	 * set to usefull default values
+	 * Update the module configuration to have all mandatory configuration flags set
+	 * to usefull default values
 	 * 
-	 * @param isNewNode true: an initial configuration is set; false: upgrading
-	 *          from previous node configuration version, set default to maintain
-	 *          previous behaviour
+	 * @param isNewNode true: an initial configuration is set; false: upgrading from
+	 *                  previous node configuration version, set default to maintain
+	 *                  previous behaviour
 	 */
 	@Override
 	public void updateModuleConfigDefaults(boolean isNewNode) {
 		ModuleConfiguration config = getModuleConfiguration();
 		int version = config.getConfigurationVersion();
-		
-		if(isNewNode) {
+
+		if (isNewNode) {
 			ForumModule forumModule = CoreSpringFactory.getImpl(ForumModule.class);
 			boolean pseudonymAllowed = forumModule.isAnonymousPostingWithPseudonymEnabled()
 					&& forumModule.isPseudonymForCourseEnabledByDefault();
 			config.setStringValue(CONFIG_PSEUDONYM_POST_ALLOWED, pseudonymAllowed ? "true" : "false");
-			boolean pseudonymDefault = pseudonymAllowed
-					&& forumModule.isPseudonymForMessageEnabledByDefault();
+			boolean pseudonymDefault = pseudonymAllowed && forumModule.isPseudonymForMessageEnabledByDefault();
 			config.setStringValue(CONFIG_PSEUDONYM_POST_DEFAULT, pseudonymDefault ? "true" : "false");
 			config.setStringValue(CONFIG_GUEST_POST_ALLOWED, "false");
 		}
@@ -474,22 +514,51 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 			config.setBooleanEntry(NodeEditController.CONFIG_STARTPAGE, Boolean.FALSE.booleanValue());
 		}
 		if (version < 3) {
-			if(config.getStringValue(CONFIG_PSEUDONYM_POST_ALLOWED) == null) {
-				config.setStringValue(CONFIG_PSEUDONYM_POST_ALLOWED, "false");	
+			if (config.getStringValue(CONFIG_PSEUDONYM_POST_ALLOWED) == null) {
+				config.setStringValue(CONFIG_PSEUDONYM_POST_ALLOWED, "false");
 			}
-			if(config.getStringValue(CONFIG_GUEST_POST_ALLOWED) == null) {
+			if (config.getStringValue(CONFIG_GUEST_POST_ALLOWED) == null) {
 				config.setStringValue(CONFIG_GUEST_POST_ALLOWED, "false");
 			}
 		}
 		if (version < 4) {
-			
+			config.setBooleanEntry(CONFIG_COACH_MODERATE_ALLOWED, true);
+			config.setBooleanEntry(CONFIG_COACH_POST_ALLOWED, true);
+			config.setBooleanEntry(CONFIG_PARTICIPANT_POST_ALLOWED, true);
+			removeDefaultPreconditions();
 		}
-		// else node is up-to-date - nothing to do
+
+		// Clean up
 		config.remove(NodeEditController.CONFIG_INTEGRATION);
-		
+
 		config.setConfigurationVersion(CURRENT_VERSION);
 	}
-	
+
+	/**
+	 * We don't want to have custom preConditions. So we keep these preConditions
+	 * only, if they have some special configs. Otherwise we delete them and use the
+	 * regular configs.
+	 */
+	private void removeDefaultPreconditions() {
+		if (hasCustomPreConditions()) {
+			boolean defaultPreconditions = !preConditionModerator.isExpertMode()
+					&& preConditionModerator.isEasyModeCoachesAndAdmins()
+					&& !preConditionModerator.isEasyModeAlwaysAllowCoachesAndAdmins()
+					&& !preConditionModerator.isAssessmentMode() && !preConditionModerator.isAssessmentModeViewResults()
+					&& !preConditionPoster.isExpertMode() && !preConditionPoster.isEasyModeCoachesAndAdmins()
+					&& !preConditionPoster.isEasyModeAlwaysAllowCoachesAndAdmins()
+					&& !preConditionPoster.isAssessmentMode() && !preConditionPoster.isAssessmentModeViewResults()
+					&& !preConditionReader.isExpertMode() && !preConditionReader.isEasyModeCoachesAndAdmins()
+					&& !preConditionReader.isEasyModeAlwaysAllowCoachesAndAdmins()
+					&& !preConditionReader.isAssessmentMode() && !preConditionReader.isAssessmentModeViewResults();
+			if (defaultPreconditions) {
+				preConditionModerator = null;
+				preConditionPoster = null;
+				preConditionReader = null;
+			}
+		}
+	}
+
 	@Override
 	protected void postImportCopyConditions(CourseEnvironmentMapper envMapper) {
 		super.postImportCopyConditions(envMapper);
@@ -508,48 +577,51 @@ public class FOCourseNode extends AbstractAccessableCourseNode {
 
 	@Override
 	public List<ConditionExpression> getConditionExpressions() {
-		List<ConditionExpression> retVal;
-		List<ConditionExpression> parentsConditions = super.getConditionExpressions();
-		if (!parentsConditions.isEmpty()) {
-			retVal = new ArrayList<>(parentsConditions);
-		}else {
-			retVal = new ArrayList<>();
-		}
-		//
-		String coS = getPreConditionModerator().getConditionExpression();
-		if (coS != null && !coS.equals("")) {
-			// an active condition is defined
-			ConditionExpression ce = new ConditionExpression(getPreConditionModerator().getConditionId());
-			ce.setExpressionString(getPreConditionModerator().getConditionExpression());
-			retVal.add(ce);
-		}
-		coS = getPreConditionPoster().getConditionExpression();
-		if (coS != null && !coS.equals("")) {
-			// an active condition is defined
-			ConditionExpression ce = new ConditionExpression(getPreConditionPoster().getConditionId());
-			ce.setExpressionString(getPreConditionPoster().getConditionExpression());
-			retVal.add(ce);
-		}
-		coS = getPreConditionReader().getConditionExpression();
-		if (coS != null && !coS.equals("")) {
-			// an active condition is defined
-			ConditionExpression ce = new ConditionExpression(getPreConditionReader().getConditionId());
-			ce.setExpressionString(getPreConditionReader().getConditionExpression());
-			retVal.add(ce);
+		if (hasCustomPreConditions()) {
+			List<ConditionExpression> retVal;
+			List<ConditionExpression> parentsConditions = super.getConditionExpressions();
+			if (!parentsConditions.isEmpty()) {
+				retVal = new ArrayList<>(parentsConditions);
+			} else {
+				retVal = new ArrayList<>();
+			}
+			//
+			String coS = getPreConditionModerator().getConditionExpression();
+			if (coS != null && !coS.equals("")) {
+				// an active condition is defined
+				ConditionExpression ce = new ConditionExpression(getPreConditionModerator().getConditionId());
+				ce.setExpressionString(getPreConditionModerator().getConditionExpression());
+				retVal.add(ce);
+			}
+			coS = getPreConditionPoster().getConditionExpression();
+			if (coS != null && !coS.equals("")) {
+				// an active condition is defined
+				ConditionExpression ce = new ConditionExpression(getPreConditionPoster().getConditionId());
+				ce.setExpressionString(getPreConditionPoster().getConditionExpression());
+				retVal.add(ce);
+			}
+			coS = getPreConditionReader().getConditionExpression();
+			if (coS != null && !coS.equals("")) {
+				// an active condition is defined
+				ConditionExpression ce = new ConditionExpression(getPreConditionReader().getConditionId());
+				ce.setExpressionString(getPreConditionReader().getConditionExpression());
+				retVal.add(ce);
+			}
+			return retVal;
 		}
-		//
-		return retVal;
+
+		return super.getConditionExpressions();
 	}
 }
 
 class ReadOnlyForumCallback implements ForumCallback {
 
-	private final boolean isGuestOnly;
+	private final boolean isModerator;
 	private final boolean isOlatAdmin;
-	private final NodeEvaluation ne;
-	
-	public ReadOnlyForumCallback(NodeEvaluation ne, boolean isOlatAdmin, boolean isGuestOnly) {
-		this.ne = ne;
+	private final boolean isGuestOnly;
+
+	public ReadOnlyForumCallback(boolean isModerator, boolean isOlatAdmin, boolean isGuestOnly) {
+		this.isModerator = isModerator;
 		this.isOlatAdmin = isOlatAdmin;
 		this.isGuestOnly = isGuestOnly;
 	}
@@ -568,7 +640,7 @@ class ReadOnlyForumCallback implements ForumCallback {
 	public boolean mayReplyMessage() {
 		return false;
 	}
-	
+
 	@Override
 	public boolean mayEditOwnMessage() {
 		return false;
@@ -596,8 +668,9 @@ class ReadOnlyForumCallback implements ForumCallback {
 
 	@Override
 	public boolean mayFilterForUser() {
-		if (isGuestOnly) return false;
-		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
+		if (isGuestOnly)
+			return false;
+		return isModerator || isOlatAdmin;
 	}
 
 	@Override
@@ -608,7 +681,8 @@ class ReadOnlyForumCallback implements ForumCallback {
 
 class ForumNodeForumCallback implements ForumCallback {
 
-	private final NodeEvaluation ne;
+	private final boolean isPoster;
+	private final boolean isModerator;
 	private final boolean isOlatAdmin;
 	private final boolean isGuestOnly;
 	private final boolean guestPostAllowed;
@@ -616,16 +690,11 @@ class ForumNodeForumCallback implements ForumCallback {
 	private final boolean anonymousPostDefault;
 	private final SubscriptionContext subscriptionContext;
 
-	/**
-	 * @param ne the nodeevaluation for this coursenode
-	 * @param isOlatAdmin true if the user is olat-admin
-	 * @param isGuestOnly true if the user is olat-guest
-	 * @param subscriptionContext
-	 */
-	public ForumNodeForumCallback(NodeEvaluation ne, boolean isOlatAdmin, boolean isGuestOnly,
+	public ForumNodeForumCallback(boolean isPoster, boolean isModerator, boolean isOlatAdmin, boolean isGuestOnly,
 			boolean guestPostAllowed, boolean anonymousPostAllowed, boolean anonymousPostDefault,
 			SubscriptionContext subscriptionContext) {
-		this.ne = ne;
+		this.isPoster = isPoster;
+		this.isModerator = isModerator;
 		this.isOlatAdmin = isOlatAdmin;
 		this.isGuestOnly = isGuestOnly;
 		this.guestPostAllowed = guestPostAllowed;
@@ -636,7 +705,8 @@ class ForumNodeForumCallback implements ForumCallback {
 
 	@Override
 	public boolean mayUsePseudonym() {
-		if (isGuestOnly) return false;
+		if (isGuestOnly)
+			return false;
 		return anonymousPostAllowed;
 	}
 
@@ -647,38 +717,44 @@ class ForumNodeForumCallback implements ForumCallback {
 
 	@Override
 	public boolean mayOpenNewThread() {
-		if (isGuestOnly && !guestPostAllowed) return false;
-		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
+		if (isGuestOnly && !guestPostAllowed)
+			return false;
+		return isPoster || isModerator || isOlatAdmin;
 	}
 
 	@Override
 	public boolean mayReplyMessage() {
-		if (isGuestOnly && !guestPostAllowed) return false;
-		return ne.isCapabilityAccessible("poster") || ne.isCapabilityAccessible("moderator") || isOlatAdmin;
+		if (isGuestOnly && !guestPostAllowed)
+			return false;
+		return isPoster || isModerator || isOlatAdmin;
 	}
-	
+
 	@Override
 	public boolean mayEditOwnMessage() {
-		if (isGuestOnly && !guestPostAllowed) return false;
+		if (isGuestOnly && !guestPostAllowed)
+			return false;
 		return true;
 	}
 
 	@Override
 	public boolean mayDeleteOwnMessage() {
-		if (isGuestOnly && !guestPostAllowed) return false;
+		if (isGuestOnly && !guestPostAllowed)
+			return false;
 		return true;
 	}
 
 	@Override
 	public boolean mayEditMessageAsModerator() {
-		if (isGuestOnly) return false;
-		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
+		if (isGuestOnly)
+			return false;
+		return isModerator || isOlatAdmin;
 	}
 
 	@Override
 	public boolean mayDeleteMessageAsModerator() {
-		if (isGuestOnly) return false;
-		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
+		if (isGuestOnly)
+			return false;
+		return isModerator || isOlatAdmin;
 	}
 
 	@Override
@@ -688,8 +764,9 @@ class ForumNodeForumCallback implements ForumCallback {
 
 	@Override
 	public boolean mayFilterForUser() {
-		if (isGuestOnly) return false;
-		return ne.isCapabilityAccessible("moderator") || isOlatAdmin;
+		if (isGuestOnly)
+			return false;
+		return isModerator|| isOlatAdmin;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/fo/FOConfigController.java b/src/main/java/org/olat/course/nodes/fo/FOConfigController.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb600f11cf499a7b3842446c2b2eb0eebd50a118
--- /dev/null
+++ b/src/main/java/org/olat/course/nodes/fo/FOConfigController.java
@@ -0,0 +1,195 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.course.nodes.fo;
+
+import static org.olat.core.gui.translator.TranslatorHelper.translateAll;
+
+import java.util.Collection;
+
+import org.olat.core.gui.UserRequest;
+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.MultipleSelectionElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.course.editor.NodeEditController;
+import org.olat.course.nodes.FOCourseNode;
+import org.olat.modules.ModuleConfiguration;
+import org.olat.modules.fo.ForumModule;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 10.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class FOConfigController extends FormBasicController {
+	
+	private static final String[] allowKeys = new String[] { "on" };
+	private static final String MODERATOR_COACH = "edit.moderator.coach";
+	private static final String[] MODERATOR_KEYS = new String[] { MODERATOR_COACH };
+	private static final String POSTER_COACH = "edit.poster.coach";
+	private static final String POSTER_PARTICIPANT = "edit.poster.participant";
+	private static final String POSTER_GUEST = "edit.poster.guest";
+	private static final String[] POSTER_KEYS = new String[] {
+			POSTER_COACH,
+			POSTER_PARTICIPANT,
+			POSTER_GUEST
+	};
+	
+	private MultipleSelectionElement allowPseudonymEl;
+	private MultipleSelectionElement pseudonymAsDefaultEl;
+	private MultipleSelectionElement allowGuestEl;
+	private MultipleSelectionElement moderatorRolesEl;
+	private MultipleSelectionElement posterRolesEl;
+
+	private final FOCourseNode foNode;
+	private final ModuleConfiguration moduleConfig;
+	
+	@Autowired
+	private ForumModule forumModule;
+	
+	public FOConfigController(UserRequest ureq, WindowControl wControl, FOCourseNode foNode) {
+		super(ureq, wControl, LAYOUT_VERTICAL);
+		this.foNode = foNode;
+		this.moduleConfig = foNode.getModuleConfiguration();
+		initForm(ureq);
+		updateUI();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		setFormContextHelp("Communication and Collaboration#_forumkonfig");
+		formLayout.setElementCssClass("o_sel_course_forum_settings");
+		
+		if(forumModule.isAnonymousPostingWithPseudonymEnabled()) {
+			FormLayoutContainer anonymousCont = FormLayoutContainer.createDefaultFormLayout("anonymous", getTranslator());
+			formLayout.add(anonymousCont);
+			anonymousCont.setFormTitle(translate("anonymous.title"));
+
+			allowPseudonymEl = uifactory.addCheckboxesHorizontal("allow.pseudonym.post", anonymousCont, allowKeys,
+					translateAll(getTranslator(), allowKeys));
+			allowPseudonymEl.setElementCssClass("o_sel_course_forum_allow_pseudo");
+			allowPseudonymEl.addActionListener(FormEvent.ONCHANGE);
+			if ("true".equals(moduleConfig.getStringValue(FOCourseNode.CONFIG_PSEUDONYM_POST_ALLOWED))) {
+				allowPseudonymEl.select(allowKeys[0], true);
+			}
+			
+			pseudonymAsDefaultEl = uifactory.addCheckboxesHorizontal("pseudonym.default", anonymousCont, allowKeys,
+					translateAll(getTranslator(), allowKeys));
+			pseudonymAsDefaultEl.setElementCssClass("o_sel_course_forum_pseudo_default");
+			pseudonymAsDefaultEl.addActionListener(FormEvent.ONCHANGE);
+
+			boolean defaultPseudonym = moduleConfig.getBooleanSafe(FOCourseNode.CONFIG_PSEUDONYM_POST_DEFAULT,
+					forumModule.isPseudonymForMessageEnabledByDefault());
+			if (defaultPseudonym) {
+				pseudonymAsDefaultEl.select(allowKeys[0], true);
+			}
+		}
+		
+		FormLayoutContainer rightsCont = FormLayoutContainer.createDefaultFormLayout("rights", getTranslator());
+		formLayout.add(rightsCont);
+		rightsCont.setFormTitle(translate("user.rights"));
+		
+		if (foNode.hasCustomPreConditions()) {
+			allowGuestEl = uifactory.addCheckboxesHorizontal("allow.guest.post", rightsCont, allowKeys,
+					translateAll(getTranslator(), allowKeys));
+			allowGuestEl.setElementCssClass("o_sel_course_forum_allow_guest");
+			allowGuestEl.addActionListener(FormEvent.ONCHANGE);
+			if ("true".equals(moduleConfig.getStringValue(FOCourseNode.CONFIG_GUEST_POST_ALLOWED))) {
+				allowGuestEl.select(allowKeys[0], true);
+			}
+		} else {
+			moderatorRolesEl = uifactory.addCheckboxesVertical("edit.moderator", rightsCont, MODERATOR_KEYS,
+					translateAll(getTranslator(), MODERATOR_KEYS), 1);
+			moderatorRolesEl.select(MODERATOR_COACH, moduleConfig.getBooleanSafe(FOCourseNode.CONFIG_COACH_MODERATE_ALLOWED));
+			moderatorRolesEl.addActionListener(FormEvent.ONCHANGE);
+			
+			posterRolesEl = uifactory.addCheckboxesVertical("edit.poster", rightsCont, POSTER_KEYS,
+					translateAll(getTranslator(), POSTER_KEYS), 1);
+			posterRolesEl.select(POSTER_COACH, moduleConfig.getBooleanSafe(FOCourseNode.CONFIG_COACH_POST_ALLOWED));
+			posterRolesEl.select(POSTER_PARTICIPANT,
+					moduleConfig.getBooleanSafe(FOCourseNode.CONFIG_PARTICIPANT_POST_ALLOWED));
+			posterRolesEl.select(POSTER_GUEST, moduleConfig.getBooleanSafe(FOCourseNode.CONFIG_GUEST_POST_ALLOWED));
+			posterRolesEl.addActionListener(FormEvent.ONCHANGE);
+		}
+	}
+	
+	private void updateUI() {
+		if(pseudonymAsDefaultEl != null && allowPseudonymEl != null) {
+			boolean isPseudonymPostAllowed = allowPseudonymEl.isAtLeastSelected(1);
+			pseudonymAsDefaultEl.setVisible(isPseudonymPostAllowed);
+		}
+	}
+	
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(allowPseudonymEl == source || pseudonymAsDefaultEl == source) {
+			doUpdatePseudonym(ureq);
+			updateUI();
+		} else if(allowGuestEl == source) {
+			doUpdatePosterGuest(ureq);
+		} else if (source == moderatorRolesEl) {
+			doUpdateModeratorRoles(ureq);
+		} else if (source == posterRolesEl) {
+			doUpdatePosterRoles(ureq);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	private void doUpdatePseudonym(UserRequest ureq) {
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_PSEUDONYM_POST_ALLOWED, allowPseudonymEl.isAtLeastSelected(1));
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_PSEUDONYM_POST_DEFAULT, pseudonymAsDefaultEl.isAtLeastSelected(1));
+		fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+	}
+
+	private void doUpdatePosterGuest(UserRequest ureq) {
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_GUEST_POST_ALLOWED, allowGuestEl.isAtLeastSelected(1));
+		fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+	}
+
+	private void doUpdateModeratorRoles(UserRequest ureq) {
+		Collection<String> selectedKeys = moderatorRolesEl.getSelectedKeys();
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_COACH_MODERATE_ALLOWED, selectedKeys.contains(MODERATOR_COACH));
+		fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+	}
+
+	private void doUpdatePosterRoles(UserRequest ureq) {
+		Collection<String> selectedKeys = posterRolesEl.getSelectedKeys();
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_COACH_POST_ALLOWED, selectedKeys.contains(POSTER_COACH));
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_PARTICIPANT_POST_ALLOWED, selectedKeys.contains(POSTER_PARTICIPANT));
+		moduleConfig.setBooleanEntry(FOCourseNode.CONFIG_GUEST_POST_ALLOWED, selectedKeys.contains(POSTER_GUEST));
+		fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java b/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java
index cde2397cf23008fc0bc1092a5577375493e491b4..2ebe6eaf2445e3b9d633b6360bf91c953c5055b0 100644
--- a/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java
+++ b/src/main/java/org/olat/course/nodes/fo/FOCourseNodeEditController.java
@@ -52,48 +52,51 @@ import org.olat.course.tree.CourseEditorTreeModel;
 public class FOCourseNodeEditController extends ActivateableTabbableDefaultController implements ControllerEventListener {
 
 	private static final String PANE_TAB_ACCESSIBILITY = "pane.tab.accessibility";
-	private static final String PANE_TAB_SETTINGS = "pane.tab.settings";
-	private static final String[] paneKeys = { PANE_TAB_ACCESSIBILITY, PANE_TAB_SETTINGS };
+	private static final String PANE_TAB_CONFIG = "pane.tab.config";
+	private static final String[] paneKeys = { PANE_TAB_ACCESSIBILITY, PANE_TAB_CONFIG };
 	
-	private final FOCourseNode foNode;
-	private final VelocityContainer myContent;
-
-	private SettingsController settingsCtrl;
-	private final ConditionEditController readerCondContr, posterCondContr, moderatorCondContr;
 	private TabbedPane myTabbedPane;
+	private VelocityContainer accessibilityContent;
+
+	private FOConfigController configCtrl;
+	private ConditionEditController readerCondContr, posterCondContr, moderatorCondContr;
+
+	private final FOCourseNode foNode;
 
 	public FOCourseNodeEditController(UserRequest ureq, WindowControl wControl, FOCourseNode forumNode, ICourse course,
 			UserCourseEnvironment euce) {
 		super(ureq, wControl);
 		this.foNode = forumNode;
 		
-		myContent = createVelocityContainer("edit");		
-
-		CourseEditorTreeModel editorModel = course.getEditorTreeModel();
-		// Reader precondition
-		Condition readerCondition = foNode.getPreConditionReader();
-		readerCondContr = new ConditionEditController(ureq, getWindowControl(), euce, readerCondition,
-				AssessmentHelper.getAssessableNodes(editorModel, forumNode));		
-		listenTo(readerCondContr);
-		myContent.put("readerCondition", readerCondContr.getInitialComponent());
-
-		// Poster precondition
-		Condition posterCondition = foNode.getPreConditionPoster();
-		posterCondContr = new ConditionEditController(ureq, getWindowControl(), euce, posterCondition,
-				AssessmentHelper.getAssessableNodes(editorModel, forumNode));		
-		listenTo(posterCondContr);
-		myContent.put("posterCondition", posterCondContr.getInitialComponent());
-
-		// Moderator precondition
-		Condition moderatorCondition = foNode.getPreConditionModerator();
-		moderatorCondContr = new ConditionEditController(ureq, getWindowControl(), euce, moderatorCondition,
-				AssessmentHelper.getAssessableNodes(editorModel, forumNode));		
-		listenTo(moderatorCondContr);
-		myContent.put("moderatorCondition", moderatorCondContr.getInitialComponent());
+		if (forumNode.hasCustomPreConditions()) {
+			accessibilityContent = createVelocityContainer("edit");
+			CourseEditorTreeModel editorModel = course.getEditorTreeModel();
+
+			// Reader precondition
+			Condition readerCondition = foNode.getPreConditionReader();
+			readerCondContr = new ConditionEditController(ureq, getWindowControl(), euce, readerCondition,
+					AssessmentHelper.getAssessableNodes(editorModel, forumNode));
+			listenTo(readerCondContr);
+			accessibilityContent.put("readerCondition", readerCondContr.getInitialComponent());
+
+			// Poster precondition
+			Condition posterCondition = foNode.getPreConditionPoster();
+			posterCondContr = new ConditionEditController(ureq, getWindowControl(), euce, posterCondition,
+					AssessmentHelper.getAssessableNodes(editorModel, forumNode));
+			listenTo(posterCondContr);
+			accessibilityContent.put("posterCondition", posterCondContr.getInitialComponent());
+
+			// Moderator precondition
+			Condition moderatorCondition = foNode.getPreConditionModerator();
+			moderatorCondContr = new ConditionEditController(ureq, getWindowControl(), euce, moderatorCondition,
+					AssessmentHelper.getAssessableNodes(editorModel, forumNode));
+			listenTo(moderatorCondContr);
+			accessibilityContent.put("moderatorCondition", moderatorCondContr.getInitialComponent());
+		}
 		
 		//Settings
-		settingsCtrl = new SettingsController(ureq, getWindowControl(), forumNode);
-		listenTo(settingsCtrl);
+		configCtrl = new FOConfigController(ureq, getWindowControl(), forumNode);
+		listenTo(configCtrl);
 	}
 
 	@Override
@@ -121,25 +124,19 @@ public class FOCourseNodeEditController extends ActivateableTabbableDefaultContr
 				foNode.setPreConditionModerator(cond);
 				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
 			}
-		} else if (source == settingsCtrl) {
-			if (event == Event.CHANGED_EVENT) {
-				String pseudoAllowed = settingsCtrl.isPseudonymPostAllowed() ? "true" : "false";
-				foNode.getModuleConfiguration().setStringValue(FOCourseNode.CONFIG_PSEUDONYM_POST_ALLOWED, pseudoAllowed);
-				String defaultPseudo = settingsCtrl.isDefaultPseudonym() ? "true" : "false";
-				foNode.getModuleConfiguration().setStringValue(FOCourseNode.CONFIG_PSEUDONYM_POST_DEFAULT, defaultPseudo);
-				String guestAllowed = settingsCtrl.isGuestPostAllowed() ? "true" : "false";
-				foNode.getModuleConfiguration().setStringValue(FOCourseNode.CONFIG_GUEST_POST_ALLOWED, guestAllowed);
-				fireEvent(urequest, NodeEditController.NODECONFIG_CHANGED_EVENT);
-			}
+		} else if (source == configCtrl) {
+			fireEvent(urequest, event);
 		}
 	}
 
 	@Override
 	public void addTabs(TabbedPane tabbedPane) {
 		myTabbedPane = tabbedPane;
-		tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), myContent);
-		if(settingsCtrl != null) {
-			tabbedPane.addTab(translate(PANE_TAB_SETTINGS), settingsCtrl.getInitialComponent());
+		if (accessibilityContent != null) {
+			tabbedPane.addTab(translate(PANE_TAB_ACCESSIBILITY), accessibilityContent);
+		}
+		if(configCtrl != null) {
+			tabbedPane.addTab(translate(PANE_TAB_CONFIG), configCtrl.getInitialComponent());
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/nodes/fo/SettingsController.java b/src/main/java/org/olat/course/nodes/fo/SettingsController.java
deleted file mode 100644
index 6cd8e4bdc2334e7014998d73f87fbeef5e79de40..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/course/nodes/fo/SettingsController.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.course.nodes.fo;
-
-import org.olat.core.gui.UserRequest;
-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.MultipleSelectionElement;
-import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
-import org.olat.core.gui.components.form.flexible.impl.FormEvent;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.Event;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.course.nodes.FOCourseNode;
-import org.olat.modules.fo.ForumModule;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * 
- * Initial date: 10.11.2015<br>
- * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
- *
- */
-public class SettingsController extends FormBasicController {
-	
-	private static final String[] allowKeys = new String[] { "on" };
-	
-	private MultipleSelectionElement allowPseudonymEl, pseudonymAsDefaultEl, allowGuestEl;
-
-	private final FOCourseNode foNode;
-	
-	@Autowired
-	private ForumModule forumModule;
-	
-	public SettingsController(UserRequest ureq, WindowControl wControl, FOCourseNode foNode) {
-		super(ureq, wControl, LAYOUT_VERTICAL);
-		this.foNode = foNode;
-		initForm(ureq);
-		updateUI();
-	}
-
-	@Override
-	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-		setFormTitle("settings.title");
-		setFormContextHelp("Communication and Collaboration#_forumkonfig");
-		formLayout.setElementCssClass("o_sel_course_forum_settings");
-		
-		if(forumModule.isAnonymousPostingWithPseudonymEnabled()) {
-			String[] allowPseudonymValues = new String[] { translate("allow.pseudonym.post") };
-			allowPseudonymEl = uifactory.addCheckboxesHorizontal("allow.pseudonym", null, formLayout,
-					allowKeys, allowPseudonymValues);
-			allowPseudonymEl.setElementCssClass("o_sel_course_forum_allow_pseudo");
-			allowPseudonymEl.setLabel(null, null);
-			allowPseudonymEl.addActionListener(FormEvent.ONCHANGE);
-			
-			if("true".equals(foNode.getModuleConfiguration().getStringValue(FOCourseNode.CONFIG_PSEUDONYM_POST_ALLOWED))) {
-				allowPseudonymEl.select(allowKeys[0], true);
-			}
-
-			String[] defaultPseudonymValues = new String[] { translate("pseudonym.default") };
-			pseudonymAsDefaultEl = uifactory.addCheckboxesHorizontal("pseudonym.default", null, formLayout,
-					allowKeys, defaultPseudonymValues);
-			pseudonymAsDefaultEl.setElementCssClass("o_sel_course_forum_pseudo_default");
-			pseudonymAsDefaultEl.setLabel(null, null);
-			pseudonymAsDefaultEl.addActionListener(FormEvent.ONCHANGE);
-			
-			boolean defaultPseudonym = foNode.getModuleConfiguration().getBooleanSafe(FOCourseNode.CONFIG_PSEUDONYM_POST_DEFAULT,
-					forumModule.isPseudonymForMessageEnabledByDefault());
-			if(defaultPseudonym) {
-				pseudonymAsDefaultEl.select(allowKeys[0], true);
-			}
-		}
-		
-		String[] allowGuestValues = new String[] { translate("allow.guest.post") };
-		allowGuestEl = uifactory.addCheckboxesHorizontal("allow.guest", null, formLayout,
-				allowKeys, allowGuestValues);
-		allowGuestEl.setElementCssClass("o_sel_course_forum_allow_guest");
-		allowGuestEl.setLabel(null, null);
-		allowGuestEl.addActionListener(FormEvent.ONCHANGE);
-		if("true".equals(foNode.getModuleConfiguration().getStringValue(FOCourseNode.CONFIG_GUEST_POST_ALLOWED))) {
-			allowGuestEl.select(allowKeys[0], true);
-		}
-	}
-	
-	private void updateUI() {
-		if(pseudonymAsDefaultEl != null && allowPseudonymEl != null) {
-			pseudonymAsDefaultEl.setVisible(isPseudonymPostAllowed());
-		}
-	}
-	
-	@Override
-	protected void doDispose() {
-		//
-	}
-	
-	public boolean isPseudonymPostAllowed() {
-		return allowPseudonymEl == null ? false : allowPseudonymEl.isAtLeastSelected(1);
-	}
-	
-	public boolean isDefaultPseudonym() {
-		return pseudonymAsDefaultEl == null ? false : pseudonymAsDefaultEl.isAtLeastSelected(1);
-	}
-	
-	public boolean isGuestPostAllowed() {
-		return allowGuestEl.isAtLeastSelected(1);
-	}
-	
-	@Override
-	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
-		if(allowPseudonymEl == source || pseudonymAsDefaultEl == source) {
-			fireEvent(ureq, Event.CHANGED_EVENT);
-			updateUI();
-		} else if(allowGuestEl == source) {
-			fireEvent(ureq, Event.CHANGED_EVENT);
-		}
-		super.formInnerEvent(ureq, source, event);
-	}
-
-	@Override
-	protected void formOK(UserRequest ureq) {
-		//
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ar.properties
index 38ef1cb59c5181e976587327bf64e36dafa50384..8af7e41d112a0757736468bbf4e9f71f5077a099 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ar.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=\u0646\u0639\u0645\u060C \u0639\u0631\u0636 \u0635
 
 
 pane.tab.accessibility=\u0648\u0635\u0648\u0644
-pane.tab.foconfig=\u0639\u0631\u0636
 peekview.allItemsLink=\u0643\u0644 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0627\u062A
 preview.canModerate=\u062A\u0645\u0643\u064A\u0646 \u0639\u0631\u0636 \u0627\u0644\u0645\u0634\u0627\u0631\u0643\u0627\u062A \u0641\u0649 \u0627\u0644\u0645\u0646\u062A\u062F\u0649
 preview.canPost=\u062A\u0645\u0643\u064A\u0646 \u0627\u0644\u0643\u062A\u0627\u0628\u0629 \u0641\u0649 \u0627\u0644\u0645\u0646\u062A\u062F\u0649
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_bg.properties
index 433e7a0605c39b1ceeba8fead9f86866a289c0e2..36d3b336827a48065868d181abb68179d89c3cd3 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_bg.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=\u0414\u0430, \u043F\u043E\u043A\u0430\u0436\u0435
 
 
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u044A\u043F
-pane.tab.foconfig=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435
 preview.canModerate=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F\u043D\u0435\u0442\u043E \u043D\u0430 \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u043E\u0442\u043E \u0432\u044A\u0432 \u0444\u043E\u0440\u0443\u043C\u0430 \u0435 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0430\u043D\u043E
 preview.canPost=\u041F\u0438\u0441\u0430\u043D\u0435\u0442\u043E \u043D\u0430 \u0441\u044A\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432\u044A\u0432 \u0444\u043E\u0440\u0443\u043C\u0430 \u0435 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0430\u043D\u043E
 preview.canRead=\u0427\u0435\u0442\u0435\u043D\u0435\u0442\u043E \u043D\u0430 \u0441\u044A\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0432\u044A\u0432 \u0444\u043E\u0440\u0443\u043C\u0430 \u0435 \u0430\u043A\u0442\u0438\u0432\u0438\u0440\u0430\u043D\u043E
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_cs.properties
index d8bcd7b248b828fd1dfc0cb5f834d6572bd3e276..52c957d7e937b0c5a81ba4550ccf52b1d5cb619c 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_cs.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=Ano, zobrazit uv\u00EDtac\u00ED str\u00E1nku.
 
 
 pane.tab.accessibility=P\u0159\u00EDstup
-pane.tab.foconfig=Zobrazit
 preview.canModerate=Sou\u010Dasn\u00FD p\u0159\u00EDstup do f\u00F3ra je mo\u017En\u00FD
 preview.canPost=Zapisovac\u00ED pr\u00E1vo do f\u00F3ra je p\u0159\u00EDstupn\u00E9
 preview.canRead=\u010Ctec\u00ED pr\u00E1vo do f\u00F3ra je p\u0159\u00EDstupn\u00E9
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_da.properties
index 2f0b89f9f946c7b99ec9cbc06b6265a8193ceb02..bf8c14da6b9e2ddfb5d7969f3eb960f28c8491a1 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_da.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=Ja, vis velkomstsiden.
 
 
 pane.tab.accessibility=Adgange
-pane.tab.foconfig=Visning
 preview.canModerate=Pr\u00E6sentation af forunm indhold er muligt
 preview.canPost=Det er muligt at skrive forum indhold
 preview.canRead=Det er muligt at l\u00E6se forum indhold
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties
index 6d5f448ff284d1401f7cf6e2937dd2c68a5f3f9d..8a21fedfaf6b3617f7ea28c4044f21b9a92bf854 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_de.properties
@@ -1,6 +1,7 @@
 #Mon Mar 02 09:54:04 CET 2009
-allow.guest.post=Nicht registrierten Benutzern (G\u00E4sten) das Erstellen von Beitr\u00E4gen gestatten
+allow.guest.post=G\u00E4sten das Erstellen von Beitr\u00E4gen gestatten
 allow.pseudonym.post=Beitr\u00E4ge mit Pseudonym zulassen
+anonymous.title=Aliase
 command.closefo=Ansicht schliessen
 command.show=Forum anzeigen
 command.showpopup=Forum in neuem Fenster anzeigen
@@ -11,14 +12,19 @@ display.config.fieldsettitle=Konfiguration
 display.config.startPage=Mit Startseite?
 display.config.startPage.false=Nein, Inhalt direkt starten
 display.config.startPage.true=Ja, anzeigen
+edit.moderator=Moderator
+edit.moderator.coach=Betreuer
+edit.poster=Forumsbeitr\u00E4ge erstellen
+edit.poster.coach=Betreuer
+edit.poster.guest=Gast
+edit.poster.participant=Teilnehemer
 pane.tab.accessibility=Zugang
-pane.tab.foconfig=Darstellung
-pane.tab.settings=Konfiguration
-settings.title=Konfiguration
+pane.tab.config=Konfiguration
+peekview.allItemsLink= Alle Beitr\u00E4ge
 preview.canModerate=Forumsbeitr\u00E4ge moderieren m\u00F6glich
 preview.canPost=Forumsbeitr\u00E4ge schreiben m\u00F6glich
 preview.canRead=Forumsbeitr\u00E4ge lesen m\u00F6glich
 preview.header=Rechte im Forum f\u00FCr den simulierten Benutzer
 pseudonym.default=Pseudonym im einzelnen Forum-Post aktiviert
+user.rights=Benutzerberechtigungen
 warn.forumdelete=Achtung\: Alle Beitr\u00E4ge werden gel\u00F6scht.
-peekview.allItemsLink = Alle Beitr\u00E4ge
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_el.properties
index 54e673cdb032d17e2e2b41a73ecff8792dab549d..3390ec8b4ddb79b797ab1118861c6e3f60f4fc1d 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_el.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=\u039D\u03B1\u03B9, \u03B5\u03BC\u03C6\u03AC\u03BD
 
 
 pane.tab.accessibility=\u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7
-pane.tab.foconfig=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7
 peekview.allItemsLink=\u038C\u03BB\u03B5\u03C2 \u03BF\u03B9 \u03C3\u03C5\u03BC\u03BC\u03B5\u03C4\u03BF\u03C7\u03AD\u03C2
 preview.canModerate=\u0397 \u03C0\u03B1\u03C1\u03BF\u03C5\u03C3\u03AF\u03B1\u03C3\u03B7 \u03C4\u03C9\u03BD \u03B8\u03B5\u03BC\u03AC\u03C4\u03C9\u03BD \u03C4\u03BF\u03C5 forum \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE
 preview.canPost=\u03A4\u03BF \u03B3\u03C1\u03AC\u03C8\u03B9\u03BC\u03BF \u03C3\u03B5 \u03B8\u03AD\u03BC\u03B1\u03C4\u03B1 \u03C4\u03BF\u03C5 forum \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03C5\u03BD\u03B1\u03C4\u03CC
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties
index d1b2fa67b56f1950ac51f7ff7d3e33c05a371a60..a6341deb19824d7a0d4636e481dfa8a57bfaea49 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_en.properties
@@ -1,6 +1,7 @@
 #Wed Jan 26 19:01:16 CET 2011
-allow.guest.post=Allow non-registered users (guests) to post
+allow.guest.post=Allow guests to post
 allow.pseudonym.post=Allow posts using an alias
+anymous.title=Aliases
 command.closefo=Close view
 command.show=Display forum
 command.showpopup=Display forum in a new window
@@ -11,14 +12,19 @@ display.config.fieldsettitle=Configuration
 display.config.startPage=With welcome page?
 display.config.startPage.false=No, show content immediately.
 display.config.startPage.true=Yes, display welcome page.
+edit.moderator=Moderator
+edit.moderator.coach=Coach
+edit.poster=Create forum posts
+edit.poster.coach=Coach
+edit.poster.guest=Guest
+edit.poster.participant=Participant
 pane.tab.accessibility=Access
-pane.tab.foconfig=Display
-pane.tab.settings=Settings
-settings.title=Settings
+pane.tab.config=Configuration
 peekview.allItemsLink=All contributions
 preview.canModerate=Moderating forum contributions enabled
 preview.canPost=Writing forum contributions enabled
 preview.canRead=Reading forum contributions enabled
 preview.header=Forum rights for simulated user
 pseudonym.default=Activate alias in every message
+user.rights=User rights
 warn.forumdelete=Warning\: All entries will be deleted.
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_es.properties
index a32f59c852679709139625b70e46a5fe3aa19087..c62e2bc3fee1a238c02e730ea70eef304e5ced46 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_es.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=S\u00ED.
 
 
 pane.tab.accessibility=Acceso
-pane.tab.foconfig=Visualizaci\u00F3n
 preview.canModerate=Posible moderar contribuciones al foro
 preview.canPost=Posible escribir contribuciones al foro
 preview.canRead=Posible leer contribuciones al foro
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_fr.properties
index 25782e8b9f615d2333bd9a44fd136d731be7b806..0ed8b1162216594b2de5040f244443d37626d160 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_fr.properties
@@ -1,5 +1,4 @@
 #Wed Mar 08 11:26:13 CET 2017
-allow.guest.post=Permettent aux utilisateurs invit\u00E9s de r\u00E9pondre sur le forum
 allow.pseudonym.post=Autoriser les messages anonymes avec pseudonyme
 command.closefo=Fermer visualisation 
 command.show=Afficher forum 
@@ -12,13 +11,11 @@ display.config.startPage=Avec page d'accueil?
 display.config.startPage.false=Non, d\u00E9marer contenu tout de suite svp
 display.config.startPage.true=Oui, afficher svp
 pane.tab.accessibility=Acc\u00E8s
-pane.tab.foconfig=Affichage
-pane.tab.settings=Configuration
+pane.tab.config=Configuration
 peekview.allItemsLink=Toutes les contributions
 preview.canModerate=Animer des contributions du forum possible
 preview.canPost=Ecriture de contributions du forum possible
 preview.canRead=Lecture de contributions du forum possible
 preview.header=Droits dans forum pour l'utilisateur simul\u00E9
 pseudonym.default=Activer les pseudonymes pour chaque message
-settings.title=Configuration
 warn.forumdelete=Attention\: toutes les contributions seront supprim\u00E9es.
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_it.properties
index b4bc3b645ab83846cd6bc49848f975131cc30467..33b9c5e0b154fbd077a0ff5a0f9db2c99202277a 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_it.properties
@@ -1,5 +1,5 @@
 #Mon Mar 20 12:52:56 CET 2017
-allow.guest.post=Permettere agli utenti non registrati (ospiti) di postare nel forum
+allow.guest.post=Permettere agli ospiti di postare nel forum
 allow.pseudonym.post=Permettere di postare utilizzando uno pseudonimo
 command.closefo=Chiudere visualizzazione
 command.show=Mostrare forum
@@ -12,13 +12,11 @@ display.config.startPage=Con pagina d'avvio?
 display.config.startPage.false=No, avviare il contenuto direttamente
 display.config.startPage.true=S\u00EC, mostrare la pagina d'avvio
 pane.tab.accessibility=Accesso
-pane.tab.foconfig=Visualizzazione
-pane.tab.settings=Configurazione
+pane.tab.config=Configurazione
 peekview.allItemsLink=Tutti i contributi
 preview.canModerate=Moderazione dei contributi del forum possibile
 preview.canPost=Scrittura dei contributi del forum possibile
 preview.canRead=Lettura dei contributi del forum possibile
 preview.header=Diritti nel forum per l'utente simulato
 pseudonym.default=Attivare alias in ogni messaggio
-settings.title=Configurazioni
 warn.forumdelete=Attenzione\: tutti i contributi vengono eliminati.
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_jp.properties
index 649822b75d7ec0b8bbd41314e1ced5d59de376cf..7caa09df840cbc04487fab6a319330687737e9c4 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_jp.properties
@@ -14,6 +14,5 @@ display.config.startPage.true=\u306F\u3044\u3001\u30A6\u30A7\u30EB\u30AB\u30E0\u
 
 
 pane.tab.accessibility=\u30A2\u30AF\u30BB\u30B9
-pane.tab.foconfig=\u8868\u793A
 peekview.allItemsLink=\u3059\u3079\u3066\u306E\u6295\u7A3F
 warn.forumdelete=\u8B66\u544A\: \u3059\u3079\u3066\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u524A\u9664\u3055\u308C\u307E\u3059\u3002
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_nl_NL.properties
index c201a6cff26f06fb297e76b0fe454787bd751375..44e57a7f0360fa84bbfc416682d2a7ef4cfc527a 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_nl_NL.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=Ja, welkomspagina weergeven.
 
 
 pane.tab.accessibility=Toegang
-pane.tab.foconfig=Vertonen
 peekview.allItemsLink=Alle bijdragen
 preview.canModerate=Het modereren van forum bijdragen is mogelijk
 preview.canPost=Het schrijven van forum bijdragen is mogelijk
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pl.properties
index e544c1e455b1b6f029402c2dd3b59a340071cbd2..5f5ac27d6baf98a91b80013f9ce67e6406003b32 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pl.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=Tak, poka\u017C stron\u0119 powitaln\u0105.
 
 
 pane.tab.accessibility=Dost\u0119p
-pane.tab.foconfig=Wy\u015Bwietlanie
 peekview.allItemsLink=Wszystkie sk\u0142adniki
 preview.canModerate=Moderowanie jest dozwolone
 preview.canPost=Tworzenie wiadomo\u015Bci jest dozwolone
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_BR.properties
index 921f09c129475bf33ed84e04e76a328d8a971f51..2158f5f05d8c821a6361731db263efc472233541 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_BR.properties
@@ -1,5 +1,4 @@
 #Thu Mar 16 22:26:57 CET 2017
-allow.guest.post=Permitir que os utilizadores n\u00E3o registados (convidados) postem
 allow.pseudonym.post=Permitir mensagens usando um alias
 command.closefo=Fechar vis\u00E3o
 command.show=Exibir f\u00F3rum
@@ -12,13 +11,11 @@ display.config.startPage=Com p\u00E1gina de boas-vindas?
 display.config.startPage.false=N\u00E3o, mostrar conte\u00FAdo imediatamente.
 display.config.startPage.true=Sim, mostrar p\u00E1gina de boas-vindas.
 pane.tab.accessibility=Acesso
-pane.tab.foconfig=Exibir
-pane.tab.settings=Configura\u00E7\u00F5es
+pane.tab.config=Configura\u00E7\u00F5es
 peekview.allItemsLink=Todas as contribui\u00E7\u00F5es
 preview.canModerate=Apresentar contribui\u00E7\u00F5es para o f\u00F3rum \u00E9 poss\u00EDvel
 preview.canPost=Escrever contribui\u00E7\u00F5es para o f\u00F3rum \u00E9 poss\u00EDvel
 preview.canRead=Ler contribui\u00E7\u00F5es do f\u00F3rum \u00E9 poss\u00EDvel
 preview.header=Direitos do f\u00F3rum para usu\u00E1rio simulado
 pseudonym.default=Ativar alias em cada mensagem
-settings.title=Configura\u00E7\u00F5es
 warn.forumdelete=Aviso\: Todas as mensagens ser\u00E3o apagadas.
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_PT.properties
index 9ac768c914750e3a251766e1502008b7cf1c62be..9acbb7a98f76ed9cd9b4e59ff77e6c7d1c74db38 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_pt_PT.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=Sim, mostrar p\u00E1gina de boas-vindas.
 
 
 pane.tab.accessibility=Acesso
-pane.tab.foconfig=Exibir
 preview.canModerate=Apresentar contribui\u00E7\u00F5es para o f\u00F3rum \u00E9 poss\u00EDvel
 preview.canPost=Escrever contribui\u00E7\u00F5es para o f\u00F3rum \u00E9 poss\u00EDvel
 preview.canRead=Ler contribui\u00E7\u00F5es do f\u00F3rum \u00E9 poss\u00EDvel
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ru.properties
index a1ba4f9c7d3075b4d243b61388bee35e10d317a6..e715c45af2d240ce59372fa98fceedaec2a40fed 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_ru.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=\u0414\u0430, \u043F\u043E\u043A\u0430\u0437\u0430
 
 
 pane.tab.accessibility=\u0414\u043E\u0441\u0442\u0443\u043F
-pane.tab.foconfig=\u041F\u043E\u043A\u0430\u0437
 peekview.allItemsLink=\u0412\u0441\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F
 preview.canModerate=\u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043C\u043E\u0434\u0435\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0432 \u0444\u043E\u0440\u0443\u043C\u0435
 preview.canPost=\u0412\u043E\u0437\u043C\u043E\u0436\u043D\u043E \u043D\u0430\u043F\u0438\u0441\u0430\u043D\u0438\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439  
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_sq.properties
index 3e790e9dece16165b859e7649d1278f793e5eea2..995f119e1f126ff4723237cfa51ad6ba23e6ecbb 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_sq.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=Po, shfaqe faqen e mir\u00EBseardhjes.
 
 
 pane.tab.accessibility=Qasja
-pane.tab.foconfig=Shfaqja
 preview.canModerate=Kontributet e tanishme jan\u00EB t\u00EB mundshme
 preview.canPost=Kontributi i shkrimit p\u00EBr forumin \u00EBsht\u00EB i mundsh\u00EBm
 preview.canRead=Kontributi i leximi p\u00EBr forumin \u00EBsht\u00EB i mundsh\u00EBm
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_CN.properties
index bb25804906524af6ba95908d670452f9e154fd57..9f70c8331b34dec326fc003a2039cdd7b594844b 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_CN.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=\u662F, \u663E\u793A\u6B22\u8FCE\u754C\u9762
 
 
 pane.tab.accessibility=\u8BBF\u95EE
-pane.tab.foconfig=\u663E\u793A
 peekview.allItemsLink=\u6240\u6709\u8D21\u732E
 preview.canModerate=\u53EF\u4EE5\u663E\u793A\u8BBA\u575B\u8D34
 preview.canPost=\u5141\u8BB8\u53D1\u5E16
diff --git a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_TW.properties
index 53e20c76d9d227bb9ef9707061b6afaf955277fb..99e971eba2de34c02f28465d80d436a77831bbd7 100644
--- a/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/course/nodes/fo/_i18n/LocalStrings_zh_TW.properties
@@ -14,7 +14,6 @@ display.config.startPage.true=\u662F\uFF0C\u986F\u793A\u6B61\u8FCE\u9801\u9762\u
 
 
 pane.tab.accessibility=\u5B58\u53D6
-pane.tab.foconfig=\u986F\u793A
 peekview.allItemsLink=\u6240\u6709\u7684\u8CA2\u737B\u8005
 preview.canModerate=\u555F\u7528\u5C55\u793A\u8AD6\u58C7\u8CA2\u737B
 preview.canPost=\u555F\u7528\u5BEB\u5165\u8AD6\u58C7\u8CA2\u737B