diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
index 8b2f579b3605ac38a12433cdb5fc2d6a81a6eaf0..f6f4457d16eb8b5b4ec55f19a24824d7e0399dac 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -361,10 +361,10 @@ public class BaseFullWebappController extends BasicController implements DTabs,
 				&& (usess.getRoles().isOLATAdmin() || usess.getRoles().isUserManager())
 				&& (i18nModule.isTransToolEnabled() || i18nModule.isOverlayEnabled())) {
 			inlineTranslationC = wbo.createInlineTranslationDispatcherController(ureq, getWindowControl());
-			Preferences guiPrefs = ureq.getUserSession().getGuiPreferences();
+			Preferences guiPrefs = usess.getGuiPreferences();
 			Boolean isInlineTranslationEnabled = (Boolean) guiPrefs.get(I18nModule.class, I18nModule.GUI_PREFS_INLINE_TRANSLATION_ENABLED,
 					Boolean.FALSE);
-			i18nManager.setMarkLocalizedStringsEnabled(ureq.getUserSession(), isInlineTranslationEnabled);
+			i18nManager.setMarkLocalizedStringsEnabled(usess, isInlineTranslationEnabled);
 			mainVc.put("inlineTranslation", inlineTranslationC.getInitialComponent());
 		}
 
diff --git a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java
index ac2f669709feeace2139e034dad5ad80afb9d93c..10582f3a58cbf60c05c6bc759c99889d5fc2a2c8 100644
--- a/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java
+++ b/src/main/java/org/olat/course/highscore/ui/HighScoreRunController.java
@@ -23,7 +23,6 @@ package org.olat.course.highscore.ui;
  * @author fkiefer
  */
 import java.math.BigDecimal;
-
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -294,6 +293,7 @@ public class HighScoreRunController extends FormBasicController{
 						boolean choosePortrait = !anonymous || ownIdentity.equals(currentID);
 						DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(),
 								currentID, false, choosePortrait, !choosePortrait);
+						listenTo(portrait);
 						Component portraitComponent = portrait.getInitialComponent();
 						mainVC.put("portrait" + (i + 1) + "-" + (j + 1), portraitComponent);
 					}
@@ -304,6 +304,7 @@ public class HighScoreRunController extends FormBasicController{
 						if (ownIdentity.equals(currentID)) {
 							DisplayPortraitController portrait = new DisplayPortraitController(ureq, getWindowControl(),
 									currentID, true, true, false);
+							listenTo(portrait);
 							mainVC.put("portrait" + (i + 1), portrait.getInitialComponent());
 						}
 					}
diff --git a/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java b/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java
index 9ae62819c3edb4ecb29ce5761430103e35be5f9f..a351fe2bd745bc83227b22084a22225fa220ca27 100644
--- a/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java
+++ b/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java
@@ -49,6 +49,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 public class OlatDmzTopNavController extends BasicController implements LockableController {
 	
 	private Link impressumLink, aboutLink;
+	
+	private AboutController aboutCtr;
 	private LanguageChooserController languageChooserC;
 
 	@Autowired
@@ -106,20 +108,23 @@ public class OlatDmzTopNavController extends BasicController implements Lockable
 	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
 		if (source == impressumLink) {
-			ControllerCreator impressumControllerCreator = new ControllerCreator() {
-				@Override
-				public Controller createController(UserRequest lureq, WindowControl lwControl) {
-					return new ImpressumDmzMainController(lureq, lwControl);
-				}
-			};
-			PopupBrowserWindow popupBrowserWindow = Windows.getWindows(ureq).getWindowManager().createNewUnauthenticatedPopupWindowFor(ureq, impressumControllerCreator);
-			popupBrowserWindow.open(ureq);
+			doImpressum(ureq);
 		} else if (source == aboutLink) {
-			AboutController aboutCtr = new AboutController(ureq, getWindowControl());
-			listenTo(aboutCtr);
-			aboutCtr.activateAsModalDialog();
+			doAbout(ureq);
+		}
+	}
+	
+	@Override
+	public void event(UserRequest ureq, Controller source, Event event) {
+		if (aboutCtr == source) {
+			cleanUp();
 		}
 	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(aboutCtr);
+		aboutCtr = null;
+	}
 
 	@Override
 	protected void doDispose() {
@@ -128,4 +133,23 @@ public class OlatDmzTopNavController extends BasicController implements Lockable
 			languageChooserC = null;
 		}
 	}
+	
+	private void doAbout(UserRequest ureq) {
+		if(aboutCtr != null) return;
+		
+		aboutCtr = new AboutController(ureq, getWindowControl());
+		listenTo(aboutCtr);
+		aboutCtr.activateAsModalDialog();
+	}
+	
+	private void doImpressum(UserRequest ureq) {
+		ControllerCreator impressumControllerCreator = new ControllerCreator() {
+			@Override
+			public Controller createController(UserRequest lureq, WindowControl lwControl) {
+				return new ImpressumDmzMainController(lureq, lwControl);
+			}
+		};
+		PopupBrowserWindow popupBrowserWindow = Windows.getWindows(ureq).getWindowManager().createNewUnauthenticatedPopupWindowFor(ureq, impressumControllerCreator);
+		popupBrowserWindow.open(ureq);
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/gui/control/OlatFooterController.java b/src/main/java/org/olat/gui/control/OlatFooterController.java
index 39bf009405891eae5932d1a22acc21dc9f84c46a..2a9d0db7c2ee6d7a590aa66cb7440085c2189eb3 100644
--- a/src/main/java/org/olat/gui/control/OlatFooterController.java
+++ b/src/main/java/org/olat/gui/control/OlatFooterController.java
@@ -49,6 +49,7 @@ import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
 import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.UserSession;
 import org.olat.core.util.Util;
 import org.olat.login.AboutController;
 import org.olat.social.SocialModule;
@@ -74,6 +75,8 @@ public class OlatFooterController extends BasicController implements LockableCon
 	private final VelocityContainer olatFootervc;
 	private ShareLinkController shareLinkCtr;
 	
+	private AboutController aboutCtr;
+	
 	@Autowired
 	private SocialModule socialModule;
 	@Autowired
@@ -88,8 +91,9 @@ public class OlatFooterController extends BasicController implements LockableCon
 		olatFootervc = createVelocityContainer("olatFooter");
 
 		Identity identity = ureq.getIdentity();
-		boolean isGuest = (identity == null ? true : ureq.getUserSession().getRoles().isGuestOnly());
-		boolean isInvitee = (identity == null ? false : ureq.getUserSession().getRoles().isInvitee());
+		UserSession usess = ureq.getUserSession();
+		boolean isGuest = (identity == null ? true : usess.getRoles().isGuestOnly());
+		boolean isInvitee = (identity == null ? false : usess.getRoles().isInvitee());
 		
 		// Show user count
 		UserLoggedInCounter userCounter = new UserLoggedInCounter();
@@ -103,14 +107,14 @@ public class OlatFooterController extends BasicController implements LockableCon
 		}
 		
 		olatFootervc.contextPut("impressumInfos", new ImpressumInformations(impressumModule));
-		impressumLink = LinkFactory.createLink("topnav.impressum", olatFootervc, this);
+		impressumLink = LinkFactory.createLink("_footer_dmz_impressum", "topnav.impressum", olatFootervc, this);
 		impressumLink.setTooltip("topnav.impressum.alt");
 		impressumLink.setIconLeftCSS("o_icon o_icon_impress o_icon-lg");
 		impressumLink.setAjaxEnabled(false);
 		impressumLink.setTarget("_blank");
 
 		// Push information about user
-		if (!isGuest && ureq.getUserSession().isAuthenticated()) {
+		if (!isGuest && usess.isAuthenticated()) {
 			olatFootervc.contextPut("loggedIn", Boolean.TRUE);
 			if(isInvitee) {
 				String fullName = CoreSpringFactory.getImpl(UserManager.class).getUserDisplayName(ureq.getIdentity());
@@ -157,12 +161,30 @@ public class OlatFooterController extends BasicController implements LockableCon
 		if(impressumLink == source) {
 			doOpenImpressum(ureq);
 		} else if (source == aboutLink) {
-			AboutController aboutCtr = new AboutController(ureq, getWindowControl());
-			listenTo(aboutCtr);
-			aboutCtr.activateAsModalDialog();
+			doAbout(ureq);
+		}
+	}
+	
+	@Override
+	public void event(UserRequest ureq, Controller source, Event event) {
+		if(aboutCtr == source) {
+			cleanUp();
 		}
 	}
 	
+	private void cleanUp() {
+		removeAsListenerAndDispose(aboutCtr);
+		aboutCtr = null;
+	}
+	
+	private void doAbout(UserRequest ureq) {
+		if(aboutCtr != null) return;
+		
+		aboutCtr = new AboutController(ureq, getWindowControl());
+		listenTo(aboutCtr);
+		aboutCtr.activateAsModalDialog();
+	}
+	
 	protected void doOpenImpressum(UserRequest ureq) {
 		ControllerCreator impressumControllerCreator = new ControllerCreator() {
 			@Override
diff --git a/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java b/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java
index 10993e59397df9d208a8f08fd921a6a9dba623cf..646e40f4b2bd92e01b282bd26ece652d6f9883ba 100644
--- a/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java
+++ b/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java
@@ -72,7 +72,7 @@ public class OlatGuestTopNavController extends BasicController implements Lockab
 		
 		// impressum
 		vc.contextPut("impressumInfos", new ImpressumInformations(impressumModule));
-		impressumLink = LinkFactory.createLink("topnav.impressum", vc, this);
+		impressumLink = LinkFactory.createLink("_top_nav_guest_impressum", "topnav.impressum", vc, this);
 		impressumLink.setTooltip("topnav.impressum.alt");
 		impressumLink.setIconLeftCSS("o_icon o_icon_impress o_icon-lg");
 		impressumLink.setAjaxEnabled(false);
diff --git a/src/main/java/org/olat/gui/control/UserToolsMenuController.java b/src/main/java/org/olat/gui/control/UserToolsMenuController.java
index f668e59d4acf15571584ba28f316f41b581ecb3b..705b1fd1bc1de67c7dcf3deeeee5a0ed805b9fcf 100644
--- a/src/main/java/org/olat/gui/control/UserToolsMenuController.java
+++ b/src/main/java/org/olat/gui/control/UserToolsMenuController.java
@@ -65,19 +65,20 @@ public class UserToolsMenuController extends BasicController implements Lockable
 		menuVC.setDomReplacementWrapperRequired(false);
 		if(ureq.getIdentity() != null) {
 			UserSession usess = ureq.getUserSession();
-			if(usess != null && ureq.getUserSession().getRoles() != null) {
+			if(usess != null && usess.getRoles() != null) {
 				boolean isGuest = usess.getRoles().isGuestOnly();
 				boolean isInvitee = usess.getRoles().isInvitee();
 				if(!isGuest && !isInvitee) {
 					loadPersonalTools(ureq);
 				}
 			}
+			menuVC.contextPut("authenticated", usess.isAuthenticated());
 		}
 		putInitialPanel(menuVC);
 	}
 
 	private void loadPersonalTools(UserRequest ureq) {
-		List<String> linksName = new ArrayList<String>();
+		List<String> linksName = new ArrayList<>();
 		List<String> configLinksName = new ArrayList<>();
 		List<String> searchLinksName = new ArrayList<>();
 		List<String> systemLinksName = new ArrayList<>();
diff --git a/src/main/java/org/olat/gui/control/_content/menu.html b/src/main/java/org/olat/gui/control/_content/menu.html
index 0e955e974788f2ad4c235be0500d25e346595f88..dda28eb404b9fdf0e1850e105190396247046cb8 100644
--- a/src/main/java/org/olat/gui/control/_content/menu.html
+++ b/src/main/java/org/olat/gui/control/_content/menu.html
@@ -26,6 +26,7 @@
 		#end
 		<li role="presentation" class="divider"></li>
 	#end
+	#if($r.isTrue($authenticated))
 	<li>
 		## make logout link very basic without onClick handler in case javaScript is broken it is still possible to log out
 		## except for the onolatunload() method which must be executed to correctly finish SCORM modules (OLAT-6255)
@@ -34,4 +35,5 @@
 			<i class="o_icon o_icon_logout o_icon-fw"></i> $r.translate("topnav.logout")
 		</a>
 	</li>
+	#end
 </ul>
\ No newline at end of file
diff --git a/src/main/java/org/olat/login/AboutController.java b/src/main/java/org/olat/login/AboutController.java
index 9cdd2aed610e654b98607f08ac2619b6f962806d..a358c3710ec654a7cafcb7023b853002ab2c825c 100644
--- a/src/main/java/org/olat/login/AboutController.java
+++ b/src/main/java/org/olat/login/AboutController.java
@@ -89,9 +89,11 @@ public class AboutController extends BasicController {
 	 * Open a modal dialog which can be closed by user. 
 	 */
 	public void activateAsModalDialog() {
-		cmc = new CloseableModalController(getWindowControl(), "close", this.getInitialComponent());
-		listenTo(cmc);
-		cmc.activate();
+		if(cmc == null) {
+			cmc = new CloseableModalController(getWindowControl(), "close", getInitialComponent());
+			listenTo(cmc);
+			cmc.activate();
+		}
 	}
 
 	/**
@@ -108,17 +110,16 @@ public class AboutController extends BasicController {
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == closeLink) {
-			if (cmc != null) {
-				cmc.deactivate();
-				removeAsListenerAndDispose(cmc);
-				cmc = null;
-			}
+			deactivateModalDialog();
+			fireEvent(ureq, Event.CLOSE_EVENT);
 		}
 	}
 
 	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
-		// nothing to do on cmc event, cleanup on dispose
+		if(cmc == source) {
+			fireEvent(ureq, Event.CLOSE_EVENT);
+		}
 	}
 
 	@Override
@@ -140,7 +141,8 @@ public class AboutController extends BasicController {
 	 */
 	public static final Link aboutLinkFactory(Locale locale, Controller listener, boolean withIcon, boolean withBuildInfo) {
 		Translator aboutTrans = Util.createPackageTranslator(AboutController.class, locale);
-		Link aboutLink = LinkFactory.createLink("menu.about", "menu.about", aboutTrans, null, listener, Link.LINK + Link.NONTRANSLATED);
+		Link aboutLink = LinkFactory
+				.createLink("menu.about", "menu.about", "about", "menu.about", aboutTrans, null, listener, Link.LINK + Link.NONTRANSLATED);
 		aboutLink.setCustomDisplayText(aboutTrans.translate("menu.about"));
 		if (withIcon) {			
 			aboutLink.setIconLeftCSS("o_icon o_icon_openolat o_icon-fw");
@@ -155,9 +157,6 @@ public class AboutController extends BasicController {
 				aboutLink.setTitle(title);				
 			}			
 		}
-		
 		return aboutLink;
 	}
-
-
 }
diff --git a/src/main/java/org/olat/login/LoginAuthprovidersController.java b/src/main/java/org/olat/login/LoginAuthprovidersController.java
index 83dccae10dd9104657a45612163a8ab6ef31155d..6acec3c7dabc9e1a1f5db628cd26a9c74f2bf4ae 100644
--- a/src/main/java/org/olat/login/LoginAuthprovidersController.java
+++ b/src/main/java/org/olat/login/LoginAuthprovidersController.java
@@ -56,6 +56,7 @@ import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
 import org.olat.core.util.ArrayHelper;
+import org.olat.core.util.UserSession;
 import org.olat.core.util.Util;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.i18n.I18nManager;
@@ -93,13 +94,14 @@ public class LoginAuthprovidersController extends MainLayoutBasicController impl
 		// Use fallback translator from full webapp package to translate accessibility stuff
 		super(ureq, wControl, Util.createPackageTranslator(BaseFullWebappController.class, ureq.getLocale()));
 		
-		if(ureq.getUserSession().getEntry("error.change.email") != null) {
-			wControl.setError(ureq.getUserSession().getEntry("error.change.email").toString());
-			ureq.getUserSession().removeEntryFromNonClearedStore("error.change.email");
+		UserSession usess = ureq.getUserSession();
+		if(usess.getEntry("error.change.email") != null) {
+			wControl.setError(usess.getEntry("error.change.email").toString());
+			usess.removeEntryFromNonClearedStore("error.change.email");
 		}
-		if(ureq.getUserSession().getEntry("error.change.email.time") != null) {
-			wControl.setError(ureq.getUserSession().getEntry("error.change.email.time").toString());
-			ureq.getUserSession().removeEntryFromNonClearedStore("error.change.email.time");
+		if(usess.getEntry("error.change.email.time") != null) {
+			wControl.setError(usess.getEntry("error.change.email.time").toString());
+			usess.removeEntryFromNonClearedStore("error.change.email.time");
 		}
 		
 		MainPanel panel = new MainPanel("content");
diff --git a/src/main/java/org/olat/social/shareLink/ShareLinkController.java b/src/main/java/org/olat/social/shareLink/ShareLinkController.java
index bf2ef1706e3b03e6821066c4937a7b519e485824..950fc273e073dcef10196c406227280ae3283071 100644
--- a/src/main/java/org/olat/social/shareLink/ShareLinkController.java
+++ b/src/main/java/org/olat/social/shareLink/ShareLinkController.java
@@ -37,6 +37,7 @@ import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.HistoryPoint;
 import org.olat.core.util.StringHelper;
+import org.olat.core.util.UserSession;
 import org.olat.core.util.prefs.Preferences;
 import org.olat.social.SocialModule;
 
@@ -77,7 +78,8 @@ public class ShareLinkController extends BasicController {
 		SocialModule socialModule = (SocialModule) CoreSpringFactory.getBean("socialModule");
 		shareLinkVC.contextPut("shareLinks", socialModule.getEnabledShareLinkButtons());
 		// Tell if user is logged in
-		shareLinkVC.contextPut("isUser", ureq.getUserSession().isAuthenticated() && !ureq.getUserSession().getRoles().isGuestOnly());
+		UserSession usess = ureq.getUserSession();
+		shareLinkVC.contextPut("isUser", usess.isAuthenticated() && !usess.getRoles().isGuestOnly());
 		putInitialPanel(shareLinkVC);
 	}