diff --git a/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java b/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java
index c72a15c316e904ba7f286167c5f14b230b4854ab..c366d786ea5f172d0bf7dc0dbea0ecbebfba4eae 100644
--- a/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java
+++ b/src/main/java/org/olat/course/nodes/feed/FeedPeekviewController.java
@@ -87,7 +87,7 @@ public class FeedPeekviewController extends BasicController implements Controlle
 		} else {
 			peekviewVC.contextPut("wrapperCssClass", wrapperCssClass != null ? wrapperCssClass : "");
 			// add gui helper
-			FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), getTranslator(), courseId, nodeId);
+			FeedViewHelper helper = new FeedViewHelper(feed, getIdentity(), ureq.getUserSession().getRoles(), getTranslator(), courseId, nodeId);
 			peekviewVC.contextPut("helper", helper);
 			// add items, only as many as configured
 			List<Item> allItems = FeedManager.getInstance().loadFilteredAndSortedItems(feed, Collections.emptyList(), callback, getIdentity());
diff --git a/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java b/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java
index f3b18512155df915f7e6dcacdde881f4682538c7..136686e63200b5e85117206c764cefa1c0e7641a 100644
--- a/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java
+++ b/src/main/java/org/olat/modules/webFeed/FeedViewHelper.java
@@ -28,12 +28,13 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
+import org.apache.logging.log4j.Logger;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.Roles;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
-import org.apache.logging.log4j.Logger;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
@@ -64,10 +65,13 @@ public class FeedViewHelper {
 	
 	// display 5 items per default
 	private int itemsPerPage = 5;
+	private Roles roles;
 	private Identity identity;
 	private Translator translator;
 	private Locale locale;
-	private String baseUri, feedUrl, nodeId;
+	private String baseUri;
+	private String feedUrl;
+	private String nodeId;
 	private Long courseId;
 	private static final String MEDIA_DIR = Path.MEDIA_DIR;
 	// Per default show the first page
@@ -81,12 +85,13 @@ public class FeedViewHelper {
 	 * @param feed
 	 * @param locale
 	 */
-	public FeedViewHelper(Feed feed, Identity identity, Translator translator, Long courseId, String nodeId) {
+	public FeedViewHelper(Feed feed, Identity identity, Roles roles, Translator translator, Long courseId, String nodeId) {
 		this.identity = identity;
 		this.translator = translator;
 		this.locale = translator.getLocale();
 		this.courseId = courseId;
 		this.nodeId = nodeId;
+		this.roles = roles;
 		this.setURIs(feed);
 	}
 
@@ -96,9 +101,9 @@ public class FeedViewHelper {
 	 * @param feed
 	 * @param identityKey
 	 */
-	FeedViewHelper(Feed feed, Identity identity, Long courseId, String nodeId) {
+	FeedViewHelper(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId) {
 		this.identity = identity;
-		
+		this.roles = roles;
 		this.courseId = courseId;
 		this.nodeId = nodeId;
 		this.setURIs(feed);
@@ -110,7 +115,7 @@ public class FeedViewHelper {
 	 * @param feed 
 	 */
 	public void setURIs(Feed feed) {
-		baseUri = FeedManager.getInstance().getFeedBaseUri(feed, identity, courseId, nodeId);
+		baseUri = FeedManager.getInstance().getFeedBaseUri(feed, identity, roles, courseId, nodeId);
 		// Set feed base URI for internal feeds
 		if (feed.isInternal()) {
 			feedUrl = baseUri + "/" + FeedManager.RSS_FEED_NAME;
diff --git a/src/main/java/org/olat/modules/webFeed/RSSFeed.java b/src/main/java/org/olat/modules/webFeed/RSSFeed.java
index 51ffebf3b10154f822480deeb3ee58c13c8b1b36..89c6b1275451dd4ee6c04f8dd1909a5844b5e9b2 100644
--- a/src/main/java/org/olat/modules/webFeed/RSSFeed.java
+++ b/src/main/java/org/olat/modules/webFeed/RSSFeed.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.olat.core.commons.services.notifications.PersonalRSSServlet;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
 import org.olat.core.util.filter.FilterFactory;
 import org.olat.modules.webFeed.manager.FeedManager;
 
@@ -53,12 +54,12 @@ public class RSSFeed extends SyndFeedImpl {
 	 * Constructor. The identityKey is needed to generate personal URLs for the
 	 * corresponding user.
 	 */
-	public RSSFeed(Feed feed, Identity identity, Long courseId, String nodeId) {
+	public RSSFeed(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId) {
 		super();
 
 		// This helper object is required for generating the appropriate URLs for
 		// the given user (identity)
-		FeedViewHelper helper = new FeedViewHelper(feed, identity, courseId, nodeId);
+		FeedViewHelper helper = new FeedViewHelper(feed, identity, roles, courseId, nodeId);
 
 		setFeedType("rss_2.0");
 		setEncoding(PersonalRSSServlet.DEFAULT_ENCODING);
diff --git a/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java b/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java
index f82afe42386dbfb4b7a1b39b1967bd6a8a1a4371..477b74524d91ba8193fbec70277e2a186942afbd 100644
--- a/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java
+++ b/src/main/java/org/olat/modules/webFeed/dispatching/FeedMediaDispatcher.java
@@ -278,8 +278,12 @@ public class FeedMediaDispatcher implements Dispatcher, GenericEventListener {
 		if (path.isFeedType()) {
 			// Only create feed if modified. Send not modified response else.
 			Identity identity = null;
+			Roles roles = null;
 			if(path.getIdentityKey() != null) {
 				identity = securityManager.loadIdentityByKey(path.getIdentityKey());
+				roles = securityManager.getRoles(identity);
+			} else {
+				roles = Roles.guestRoles();
 			}
 			long sinceModifiedMillis = request.getDateHeader("If-Modified-Since");
 			
@@ -300,7 +304,7 @@ public class FeedMediaDispatcher implements Dispatcher, GenericEventListener {
 					return;
 				}
 			} else {
-				resource = feedManager.createFeedFile(feed, identity, path.getCourseId(), path.getNodeId());
+				resource = feedManager.createFeedFile(feed, identity, roles, path.getCourseId(), path.getNodeId());
 			}
 		} else if (path.isItemType()) {
 			resource = feedManager.createItemMediaFile(feed, path.getItemId(), path.getItemFileName());
diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java b/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java
index 4c3120ed77d7e06568320f9d3a1c220fc597d070..bd158bf0ef2a14cda80f9f22a9a3cbbd4f72c8d7 100644
--- a/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java
+++ b/src/main/java/org/olat/modules/webFeed/manager/FeedManager.java
@@ -28,6 +28,7 @@ import org.olat.core.gui.components.form.flexible.elements.FileElement;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.Roles;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.vfs.Quota;
@@ -297,7 +298,7 @@ public abstract class FeedManager {
 	 * @param idKey
 	 * @return The base URI of the (RSS) feed
 	 */
-	public abstract String getFeedBaseUri(Feed feed, Identity identity, Long courseId, String nodeId);
+	public abstract String getFeedBaseUri(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId);
 
 	/**
 	 * Creates the RSS feed resource.
@@ -307,7 +308,7 @@ public abstract class FeedManager {
 	 * @param identityKey
 	 * @return The RSS feed as a MediaResource
 	 */
-	public abstract MediaResource createFeedFile(OLATResourceable feed, Identity identity, Long courseId, String nodeId);
+	public abstract MediaResource createFeedFile(OLATResourceable feed, Identity identity, Roles roles, Long courseId, String nodeId);
 
 	/**
 	 * Creates and returns a zip-file media resource of the given feed resource
diff --git a/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java b/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java
index 1439e1b4f3d8b3a0f37264ad0006d2b346d507ac..5e6558329b5f96c30de60547a9a97116d7794110 100644
--- a/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java
+++ b/src/main/java/org/olat/modules/webFeed/manager/FeedManagerImpl.java
@@ -28,6 +28,7 @@ import java.util.Date;
 import java.util.List;
 
 import org.apache.commons.lang.RandomStringUtils;
+import org.apache.logging.log4j.Logger;
 import org.olat.admin.quota.QuotaConstants;
 import org.olat.basesecurity.Authentication;
 import org.olat.basesecurity.BaseSecurity;
@@ -43,7 +44,7 @@ import org.olat.core.gui.media.MediaResource;
 import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
-import org.apache.logging.log4j.Logger;
+import org.olat.core.id.Roles;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Encoder;
 import org.olat.core.util.FileUtils;
@@ -682,7 +683,7 @@ public class FeedManagerImpl extends FeedManager {
 	 * @return The feed base uri for the given user (identity)
 	 */
 	@Override
-	public String getFeedBaseUri(Feed feed, Identity identity, Long courseId, String nodeId) {
+	public String getFeedBaseUri(Feed feed, Identity identity, Roles roles, Long courseId, String nodeId) {
 		boolean isCourseNode = courseId != null && nodeId != null;
 
 		final String slash = "/";
@@ -715,7 +716,12 @@ public class FeedManagerImpl extends FeedManager {
 			} else {
 				entry = repositoryManager.lookupRepositoryEntry(feed, false);
 			}
-			if (entry == null || entry.isGuests()) {
+
+			boolean isPrivate = true;
+			if (entry != null && entry.isGuests()) {
+				isPrivate = false;
+			}
+			if (isPrivate && !roles.isGuestOnly()) {
 				// identity key
 				uri.append(idKey);
 				uri.append(slash);
@@ -739,12 +745,12 @@ public class FeedManagerImpl extends FeedManager {
 	}
 
 	@Override
-	public MediaResource createFeedFile(OLATResourceable ores, Identity identity, Long courseId, String nodeId) {
+	public MediaResource createFeedFile(OLATResourceable ores, Identity identity, Roles roles, Long courseId, String nodeId) {
 		MediaResource media = null;
 		Feed feed = loadFeed(ores);
 
 		if (feed != null) {
-			SyndFeed rssFeed = new RSSFeed(feed, identity, courseId, nodeId);
+			SyndFeed rssFeed = new RSSFeed(feed, identity, roles, courseId, nodeId);
 			media = new SyndFeedMediaResource(rssFeed);
 		}
 		return media;
diff --git a/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java b/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java
index cc9ca603d8649a51ba05e50b2f01d213c861807c..2988876d27a0ec7776490934c64562018491678f 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/FeedMainController.java
@@ -133,7 +133,7 @@ public class FeedMainController extends BasicController implements Activateable2
 			vcMain.contextPut("errorMessage", translate("feed.error"));
 			putInitialPanel(vcMain);
 		} else {
-			helper = new FeedViewHelper(feed, getIdentity(), uiFactory.getTranslator(), courseId, nodeId);
+			helper = new FeedViewHelper(feed, getIdentity(), ureq.getUserSession().getRoles(), uiFactory.getTranslator(), courseId, nodeId);
 			CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), feed);
 			display(ureq, wControl, displayConfig);
 			// do logging
diff --git a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html
index cf2913ca49a647eabe1dcf8753919afa59200aa5..016ac8d80d980552314b048b57012c930493d111 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html
+++ b/src/main/java/org/olat/modules/webFeed/ui/blog/_content/info.html
@@ -2,10 +2,7 @@
 	#if ($r.available("feed.edit"))
 		<div class="o_edit pull-right">$r.render("feed.edit")</div>
 	#end		
-	<h2>	
-		<i class="o_icon o_icon-fw o_icon o_FileResource-BLOG_icon"></i> 
-		$r.escapeHtml($!feed.getTitle())
-	</h2>
+	<h2><i class="o_icon o_icon-fw o_icon o_FileResource-BLOG_icon"> </i> $r.escapeHtml($!feed.getTitle())</h2>
 	#if ($helper.getImageUrl($feed) && $helper.getImageUrl($feed) != "")
 		<img class="o_media" src="$helper.getImageUrl($feed)?thumbnail=180x121{$!supressCache}" alt="Blog Image" />
 	#end
@@ -20,10 +17,7 @@
 	
 		#if (!$feed.isUndefined())
 			<div class="o_subscription">
-				<a href="$!helper.getFeedUrl()" class="o_nowrap" target="_blank">
-					<i class="o_icon o_icon-fw o_icon_rss"></i> 
-					$r.translate("blog.subscribe.to.this.feed")
-				</a>
+				<a href="$!helper.getFeedUrl()" class="o_nowrap" target="_blank"><i class="o_icon o_icon-fw o_icon_rss"> </i> $r.translate("blog.subscribe.to.this.feed")</a>
 			</div>
 		#end