diff --git a/src/main/java/org/olat/core/commons/contextHelp/ContextHelpLayoutControllerCreator.java b/src/main/java/org/olat/core/commons/contextHelp/ContextHelpLayoutControllerCreator.java
index 2552a1c6c8b5ba6e14eeaf0efbfc09cc4c5ecd25..4fefb88dab9d9be90fbe7966461ee896e34dacc4 100644
--- a/src/main/java/org/olat/core/commons/contextHelp/ContextHelpLayoutControllerCreator.java
+++ b/src/main/java/org/olat/core/commons/contextHelp/ContextHelpLayoutControllerCreator.java
@@ -28,7 +28,7 @@ import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayout;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
@@ -74,12 +74,12 @@ class ContextHelpLayoutControllerCreator implements BaseFullWebappPopupLayout {
 			}
 
 			@Override
-			public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl) {
-				TopNavController topnavCtr = null;
+			public LockableController createTopNavController(UserRequest ureq, WindowControl wControl) {
+				LockableController topnavCtr = null;
 				// ----------- topnav, optional (e.g. for imprint, logout) ------------------		
 				if (CoreSpringFactory.containsBean("fullWebApp.ContextHelpTopNavControllerCreator")) {
 					ControllerCreator topnavControllerCreator = (ControllerCreator) CoreSpringFactory.getBean("fullWebApp.ContextHelpTopNavControllerCreator");
-					topnavCtr = (TopNavController)topnavControllerCreator.createController(ureq, wControl);
+					topnavCtr = (LockableController)topnavControllerCreator.createController(ureq, wControl);
 				}
 				return topnavCtr;
 			}
@@ -96,14 +96,14 @@ class ContextHelpLayoutControllerCreator implements BaseFullWebappPopupLayout {
 			}
 
 			@Override
-			public Controller createFooterController(UserRequest ureq, WindowControl control) {
+			public LockableController createFooterController(UserRequest ureq, WindowControl control) {
 				Controller footerCtr = null;
 				// ----------- footer, optional (e.g. for copyright, powerd by) ------------------
 				if (CoreSpringFactory.containsBean("fullWebApp.ContextHelpFooterControllerCreator")) {
 					ControllerCreator footerCreator = (ControllerCreator) CoreSpringFactory.getBean("fullWebApp.ContextHelpFooterControllerCreator");
 					footerCtr = footerCreator.createController(ureq, control);
 				}
-				return footerCtr;
+				return (LockableController)footerCtr;
 			}
 		};
 	}
diff --git a/src/main/java/org/olat/core/commons/contextHelp/ContextHelpTopNavController.java b/src/main/java/org/olat/core/commons/contextHelp/ContextHelpTopNavController.java
index 8f83be2a50a452741d60f46f654e62d2314014ad..1c9c0a79823b6147b83b0017031d2a367bc346c9 100644
--- a/src/main/java/org/olat/core/commons/contextHelp/ContextHelpTopNavController.java
+++ b/src/main/java/org/olat/core/commons/contextHelp/ContextHelpTopNavController.java
@@ -25,7 +25,7 @@ import java.util.Locale;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.chiefcontrollers.LanguageChangedEvent;
 import org.olat.core.commons.fullWebApp.DefaultMinimalTopNavController;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.dispatcher.impl.StaticMediaDispatcher;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.Windows;
@@ -65,7 +65,7 @@ import org.olat.search.ui.SearchInputController;
  * 
  * @author Florian Gnaegi, frentix GmbH, http://www.frentix.com
   */
-public class ContextHelpTopNavController extends FormBasicController implements TopNavController {
+public class ContextHelpTopNavController extends FormBasicController implements LockableController {
 	static final OLATResourceable CHANGE_LANG_RESOURCE = OresHelper.createOLATResourceableType("ContextHelp:ChangeLanguageChannel");
 
 	private SingleSelection langSelection;
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 35f4100b1ad879599daf977265fd1a1026e26ade..b884bd7c3bd10f9a6af26593a419ade8fcf4b439 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -152,8 +152,8 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 	private TransientAssessmentMode lockMode;
 	
 	// NEW FROM FullChiefController
-	private TopNavController topnavCtr;
-	private Controller footerCtr;
+	private LockableController topnavCtr;
+	private LockableController footerCtr;
 	private UserToolsMenuController userToolsMenuCtrl;
 	private SiteInstance curSite;
 	private DTab curDTab;
@@ -378,6 +378,7 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 		// nav is not a controller part because it is a fundamental part of the BaseFullWebAppConroller.
 		navSitesVc = createVelocityContainer("nav_sites");
 		navSitesVc.setDomReplacementWrapperRequired(false);
+		navSitesVc.contextPut("visible", Boolean.TRUE);
 		mainVc.put("sitesComponent", navSitesVc);
 		
 		navTabsVc = createVelocityContainer("nav_tabs");
@@ -476,7 +477,6 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 			mainVc.put("footerComponent", footerCmp);
 		}
 		
-		
 		contentCtrl = baseFullWebappControllerParts.getContentController(ureq, getWindowControl());
 		if (contentCtrl != null) {
 			listenTo(contentCtrl);
@@ -1295,19 +1295,23 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 		if(topnavCtr != null) {
 			topnavCtr.lockResource(resource);
 		}
+		if(footerCtr != null) {
+			footerCtr.lockResource(resource);
+		}
+		
 		if(userToolsMenuCtrl != null) {
 			userToolsMenuCtrl.lockResource(resource);
 		}
 		
-		if(navSitesVc.isVisible()) {
-			navSitesVc.setVisible(false);
-		}
 		for(int i=dtabsControllers.size(); i-->0; ) {
 			DTab tab = dtabs.get(i);
 			if(!lockResource.getResourceableId().equals(tab.getOLATResourceable().getResourceableId())) {
 				removeDTab(null, tab);
 			}
 		}
+		navSitesVc.contextPut("visible", Boolean.FALSE);
+		navSitesVc.setDirty(true);
+		navTabsVc.setDirty(true);
 	}
 
 	private void unlockResource() {
@@ -1315,10 +1319,15 @@ public class BaseFullWebappController extends BasicController implements ChiefCo
 		if(topnavCtr != null) {
 			topnavCtr.unlockResource();
 		}
+		if(footerCtr != null) {
+			footerCtr.unlockResource();
+		}
 		if(userToolsMenuCtrl != null) {
 			userToolsMenuCtrl.unlockResource();
 		}
-		navSitesVc.setVisible(true);
+		navSitesVc.contextPut("visible", Boolean.TRUE);
+		navSitesVc.setDirty(true);
+		navTabsVc.setDirty(true);
 	}
 
 	private boolean asyncLockResource(TransientAssessmentMode mode) {
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappControllerParts.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappControllerParts.java
index 163f501b566d51f0fd9448a66c06fd8aa2c38444..c684e4dcdd50c528b2dcc8e20f7a752a01e6d435 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappControllerParts.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappControllerParts.java
@@ -69,7 +69,7 @@ public interface BaseFullWebappControllerParts {
 	 * @param wControl
 	 * @return
 	 */
-	public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl);
+	public LockableController createTopNavController(UserRequest ureq, WindowControl wControl);
 	
 	/**
 	 * footer controller (user count, logged in user, logo, verson info, etc)
@@ -77,6 +77,6 @@ public interface BaseFullWebappControllerParts {
 	 * @param wControl
 	 * @return
 	 */
-	public Controller createFooterController(UserRequest ureq, WindowControl wControl);
+	public LockableController createFooterController(UserRequest ureq, WindowControl wControl);
 	
 }
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/TopNavController.java b/src/main/java/org/olat/core/commons/fullWebApp/LockableController.java
similarity index 95%
rename from src/main/java/org/olat/core/commons/fullWebApp/TopNavController.java
rename to src/main/java/org/olat/core/commons/fullWebApp/LockableController.java
index 0e4239b647d97195d5e556fd6afba659c94e1db8..fabf969e4a1d36b5636b01d76c12bff5c29a716b 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/TopNavController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/LockableController.java
@@ -28,7 +28,7 @@ import org.olat.core.id.OLATResourceable;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public interface TopNavController extends Controller {
+public interface LockableController extends Controller {
 	
 	public void lockResource(OLATResourceable resource);
 	
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/_content/nav_sites.html b/src/main/java/org/olat/core/commons/fullWebApp/_content/nav_sites.html
index 5bed533bc977e6aab730bdc730e7afb713aed0dc..b5f3bd4b56e1d39905777b46c1dacb7524a35d46 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/_content/nav_sites.html
+++ b/src/main/java/org/olat/core/commons/fullWebApp/_content/nav_sites.html
@@ -1,15 +1,14 @@
-## ---- START sites tabs ---
 <ul id="$r.getCId()" class="o_navbar_sites nav o_navbar-nav">
-#foreach ($site in $sites)
-	#set ($siteEl = $r.getComponent("$site"))
-	#set ($navel = $siteEl.userObject.getNavElement())
-	<li class='#if($tabhelper.isSiteActive($siteEl.userObject)) active #end $!navel.getIconCSSClass()'>
-		$r.render("$site")
-	</li>
+#if($visible)
+	#foreach ($site in $sites)
+		#set ($siteEl = $r.getComponent("$site"))
+		#set ($navel = $siteEl.userObject.getNavElement())
+		<li class='#if($tabhelper.isSiteActive($siteEl.userObject)) active #end $!navel.getIconCSSClass()'>
+			$r.render("$site")
+		</li>
+	#end
 #end
 </ul>
-## ---- END sites tabs ---
-
 <script type="text/javascript">
 /* <![CDATA[ */ 
     jQuery(document).trigger("oo.nav.sites.modified");
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappMinimalLayoutControllerCreator.java b/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappMinimalLayoutControllerCreator.java
index 174ad0d5a1f63384c2d63384c008b29aee126afd..edceb5edb881961fa4ec8f392256ee574a71c99f 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappMinimalLayoutControllerCreator.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappMinimalLayoutControllerCreator.java
@@ -28,7 +28,7 @@ import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
@@ -57,29 +57,34 @@ class BaseFullWebappMinimalLayoutControllerCreator implements BaseFullWebappPopu
 	/**
 	 * @see org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayout#getFullWebappParts()
 	 */
+	@Override
 	public BaseFullWebappControllerParts getFullWebappParts() {
 		return new BaseFullWebappControllerParts() {
-		
+
+			@Override
 			public List<SiteInstance> getSiteInstances(UserRequest ureq, WindowControl control) {
 				// no static sites
 				return null;
 			}
-		
+
+			@Override
 			public Controller getContentController(UserRequest ureq, WindowControl wControl) {
 				// the content for the Pop-up Window
 				return contentControllerCreator.createController(ureq, wControl);
 			}
-		
-			public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl) {
-				TopNavController topnavCtr = null;
+
+			@Override
+			public LockableController createTopNavController(UserRequest ureq, WindowControl wControl) {
+				LockableController topnavCtr = null;
 				// ----------- topnav, optional (e.g. for imprint, logout) ------------------		
 				if (CoreSpringFactory.containsBean("fullWebApp.MinimalTopNavControllerCreator")) {
 					ControllerCreator topnavControllerCreator = (ControllerCreator) CoreSpringFactory.getBean("fullWebApp.MinimalTopNavControllerCreator");
-					topnavCtr = (TopNavController)topnavControllerCreator.createController(ureq, wControl);
+					topnavCtr = (LockableController)topnavControllerCreator.createController(ureq, wControl);
 				}
 				return topnavCtr;
 			}
-		
+
+			@Override
 			public Controller createHeaderController(UserRequest ureq, WindowControl control) {
 				Controller headerCtr = null;
 				// ----------- header, optional (e.g. for logo, advertising ) ------------------		
@@ -89,15 +94,16 @@ class BaseFullWebappMinimalLayoutControllerCreator implements BaseFullWebappPopu
 				}
 				return headerCtr;
 			}
-		
-			public Controller createFooterController(UserRequest ureq, WindowControl control) {
+
+			@Override
+			public LockableController createFooterController(UserRequest ureq, WindowControl control) {
 				Controller footerCtr = null;
 				// ----------- footer, optional (e.g. for copyright, powerd by) ------------------
 				if (CoreSpringFactory.containsBean("fullWebApp.MinimalFooterControllerCreator")) {
 					ControllerCreator footerCreator = (ControllerCreator) CoreSpringFactory.getBean("fullWebApp.MinimalFooterControllerCreator");
 					footerCtr = footerCreator.createController(ureq, control);
 				}
-				return footerCtr;
+				return (LockableController)footerCtr;
 			}
 		};
 	}
diff --git a/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappPrintLayoutControllerCreator.java b/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappPrintLayoutControllerCreator.java
index bf2a85ebdcbf53747622aae4634f01b39f928199..2adbda284d8ee7a089f967c80855c58ff14d2e2c 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappPrintLayoutControllerCreator.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/popup/BaseFullWebappPrintLayoutControllerCreator.java
@@ -22,7 +22,7 @@ package org.olat.core.commons.fullWebApp.popup;
 import java.util.List;
 
 import org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
@@ -59,7 +59,7 @@ class BaseFullWebappPrintLayoutControllerCreator implements BaseFullWebappPopupL
 			}
 
 			@Override
-			public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl) {
+			public LockableController createTopNavController(UserRequest ureq, WindowControl wControl) {
 				return null;
 			}
 
@@ -69,7 +69,7 @@ class BaseFullWebappPrintLayoutControllerCreator implements BaseFullWebappPopupL
 			}
 
 			@Override
-			public Controller createFooterController(UserRequest ureq, WindowControl control) {
+			public LockableController createFooterController(UserRequest ureq, WindowControl control) {
 				return null;
 			}
 		};
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiColumnModel.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiColumnModel.java
index 0e36a7b695017e475ee02065a6610e63b4f3204e..1c538576569f3704ab31138f031ef123ae2bd0ff 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiColumnModel.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/DefaultFlexiColumnModel.java
@@ -49,13 +49,18 @@ public class DefaultFlexiColumnModel implements FlexiColumnModel {
 		this(headerKey, columnIndex, false, null);
 	}
 	
+	public DefaultFlexiColumnModel(String headerKey, int columnIndex, boolean sortable, String sortKey) {
+		this(true, headerKey, columnIndex, sortable, sortKey, FlexiColumnModel.ALIGNMENT_LEFT,  new TextFlexiCellRenderer());
+	}
+	
 	public DefaultFlexiColumnModel(String headerKey, int columnIndex, FlexiCellRenderer renderer) {
 		this(true, headerKey, columnIndex, false, null, FlexiColumnModel.ALIGNMENT_LEFT, renderer);
 	}
 	
-	public DefaultFlexiColumnModel(String headerKey, int columnIndex, boolean sortable, String sortKey) {
-		this(true, headerKey, columnIndex, sortable, sortKey, FlexiColumnModel.ALIGNMENT_LEFT,  new TextFlexiCellRenderer());
+	public DefaultFlexiColumnModel(String headerKey, int columnIndex, boolean sortable, String sortKey, FlexiCellRenderer renderer) {
+		this(true, headerKey, columnIndex, sortable, sortKey, FlexiColumnModel.ALIGNMENT_LEFT, renderer);
 	}
+	
 	public DefaultFlexiColumnModel(boolean defVisible, String headerKey, int columnIndex, boolean sortable, String sortKey) {
 		this(defVisible, headerKey, columnIndex, sortable, sortKey, FlexiColumnModel.ALIGNMENT_LEFT,  new TextFlexiCellRenderer());
 	}
diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
index 5908996910385d1ad1cc46bcc937ccf2b29bb3cc..d93d30f83f6a5e9186f26513c38791d8df9ccd3a 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeManagerImpl.java
@@ -33,6 +33,8 @@ import javax.servlet.http.HttpServletRequest;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.core.commons.persistence.DB;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.Encoder;
 import org.olat.core.util.IPUtils;
 import org.olat.core.util.StringHelper;
@@ -67,6 +69,8 @@ import org.springframework.stereotype.Service;
 @Service("assessmentModeManager")
 public class AssessmentModeManagerImpl implements AssessmentModeManager {
 	
+	private static final OLog log = Tracing.createLoggerFor(AssessmentModeManagerImpl.class);
+	
 	@Autowired
 	private DB dbInstance;
 	@Autowired
@@ -338,6 +342,7 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager {
 	@Override
 	public boolean isSafelyAllowed(HttpServletRequest request, String safeExamBrowserKeys) {
 		boolean safe = false;
+		boolean debug = log.isDebug();
 		if(StringHelper.containsNonWhitespace(safeExamBrowserKeys)) {
 			String safeExamHash = request.getHeader("x-safeexambrowser-requesthash");
 			String url = request.getRequestURL().toString();
@@ -347,6 +352,9 @@ public class AssessmentModeManagerImpl implements AssessmentModeManager {
 				if(safeExamHash != null && safeExamHash.equals(hash)) {
 					safe = true;
 				}
+				if(debug) {
+					log.debug((safeExamHash.equals(hash) ? "Success" : "Failed") + " : " + safeExamHash +" (Header) " + hash + " (Calculated)");
+				}
 			}
 		} else {
 			safe = true;
diff --git a/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java
index 9048a5ff6c293410018067f47e03335b448c85c3..c505505c1180b01413aae04c602f2454c521bb38 100644
--- a/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/UserCourseInformationsManagerImpl.java
@@ -145,8 +145,8 @@ public class UserCourseInformationsManagerImpl extends BasicManager implements U
 				@Override
 				public void execute() {
 					try {
-						UltraLightInfos ulInfos = getUserCourseInformationsKey(courseResourceableId, identity);
-						if(ulInfos == null) {
+						UltraLightInfos reloadedUlInfos = getUserCourseInformationsKey(courseResourceableId, identity);
+						if(reloadedUlInfos == null) {
 							OLATResource courseResource = resourceManager.findResourceable(courseResourceableId, "CourseModule");
 							UserCourseInfosImpl infos = new UserCourseInfosImpl();
 							infos.setIdentity(identity);
@@ -157,8 +157,8 @@ public class UserCourseInformationsManagerImpl extends BasicManager implements U
 							infos.setVisit(1);
 							infos.setResource(courseResource);
 							dbInstance.getCurrentEntityManager().persist(infos);
-						} else if(strict || needUpdate(ulInfos)) {
-							UserCourseInfosImpl infos = loadById(ulInfos.getKey());
+						} else if(strict || needUpdate(reloadedUlInfos)) {
+							UserCourseInfosImpl infos = loadById(reloadedUlInfos.getKey());
 							if(infos != null) {
 								infos.setVisit(infos.getVisit() + 1);
 								infos.setRecentLaunch(new Date());
diff --git a/src/main/java/org/olat/course/assessment/model/AssessmentModeImpl.java b/src/main/java/org/olat/course/assessment/model/AssessmentModeImpl.java
index b43259848ae3a8866220b089d4f65e54110f4204..f568f2414aa7ce54145d35fc9a722c7d644f053e 100644
--- a/src/main/java/org/olat/course/assessment/model/AssessmentModeImpl.java
+++ b/src/main/java/org/olat/course/assessment/model/AssessmentModeImpl.java
@@ -56,7 +56,7 @@ import org.olat.repository.RepositoryEntry;
 @Table(name="o_as_mode_course")
 @NamedQueries({
 	@NamedQuery(name="assessmentModeById", query="select mode from courseassessmentmode mode where mode.key=:modeKey"),
-	@NamedQuery(name="assessmentModeByRepoEntry", query="select mode from courseassessmentmode mode where mode.repositoryEntry.key=:entryKey")
+	@NamedQuery(name="assessmentModeByRepoEntry", query="select mode from courseassessmentmode mode where mode.repositoryEntry.key=:entryKey order by mode.begin desc")
 })
 public class AssessmentModeImpl implements Persistable, AssessmentMode {
 
diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListController.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListController.java
index a8e59cd1de484f694d7b399c39f182540a58d703..ae8ff80ca6f4687b51a1f29881a3edad951d1bb7 100644
--- a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListController.java
+++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListController.java
@@ -114,16 +114,16 @@ public class AssessmentModeListController extends FormBasicController implements
 		//add the table
 		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.status.i18nKey(), Cols.status.ordinal(),
-				new ModeStatusCellRenderer()));
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.name.i18nKey(), Cols.name.ordinal()));
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.begin.i18nKey(), Cols.begin.ordinal()));
-		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.end.i18nKey(), Cols.end.ordinal()));
+				true, Cols.status.name(), new ModeStatusCellRenderer()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.name.i18nKey(), Cols.name.ordinal(), true, Cols.name.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.begin.i18nKey(), Cols.begin.ordinal(), true, Cols.begin.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.end.i18nKey(), Cols.end.ordinal(), true, Cols.end.name()));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.leadTime.i18nKey(), Cols.leadTime.ordinal(),
-				new TimeCellRenderer(getTranslator())));
+				true, Cols.leadTime.name(), new TimeCellRenderer(getTranslator())));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.followupTime.i18nKey(), Cols.followupTime.ordinal(),
-				new TimeCellRenderer(getTranslator())));
+				true, Cols.followupTime.name(), new TimeCellRenderer(getTranslator())));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.target.i18nKey(), Cols.target.ordinal(),
-				new TargetAudienceCellRenderer(getTranslator())));
+				true, Cols.target.name(), new TargetAudienceCellRenderer(getTranslator())));
 		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("start", Cols.start.ordinal(), "start",
 				new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("start"), "start"), null)));
 		columnsModel.addFlexiColumnModel(new StaticFlexiColumnModel("stop", Cols.stop.ordinal(), "stop",
diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java
index 80a51c7c7b21e5eb258cacb753c34765b3798ec6..b9160a1320f6c02ed1e797327d271a46243d4749 100644
--- a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java
+++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModel.java
@@ -21,8 +21,10 @@ package org.olat.course.assessment.ui;
 
 import java.util.List;
 
+import org.olat.core.commons.persistence.SortKey;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
 import org.olat.course.assessment.AssessmentMode;
 import org.olat.course.assessment.AssessmentModeCoordinationService;
 import org.olat.course.assessment.model.TransientAssessmentMode;
@@ -33,7 +35,7 @@ import org.olat.course.assessment.model.TransientAssessmentMode;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class AssessmentModeListModel extends DefaultFlexiTableDataModel<AssessmentMode> {
+public class AssessmentModeListModel extends DefaultFlexiTableDataModel<AssessmentMode> implements SortableFlexiTableDataModel<AssessmentMode> {
 	
 	private final AssessmentModeCoordinationService coordinationService;
 	
@@ -50,6 +52,11 @@ public class AssessmentModeListModel extends DefaultFlexiTableDataModel<Assessme
 	@Override
 	public Object getValueAt(int row, int col) {
 		AssessmentMode mode = getObject(row);
+		return getValueAt(mode, col);
+	}
+		
+	@Override
+	public Object getValueAt(AssessmentMode mode, int col) {
 		switch(Cols.values()[col]) {
 			case status: return mode.getStatus();
 			case name: return mode.getName();
@@ -76,6 +83,14 @@ public class AssessmentModeListModel extends DefaultFlexiTableDataModel<Assessme
 		return null;
 	}
 	
+	@Override
+	public void sort(SortKey orderBy) {
+		if(orderBy != null) {
+			List<AssessmentMode> views = new AssessmentModeListModelSort(orderBy, this, null).sort();
+			super.setObjects(views);
+		}
+	}
+
 	public boolean updateModeStatus(TransientAssessmentMode modeToUpdate) {
 		boolean updated = false;
 		
diff --git a/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModelSort.java b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModelSort.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e30ade2a26e2c583f2a5f4ca20ce4b7884f4b2e
--- /dev/null
+++ b/src/main/java/org/olat/course/assessment/ui/AssessmentModeListModelSort.java
@@ -0,0 +1,73 @@
+/**
+ * <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.assessment.ui;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Locale;
+
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.course.assessment.AssessmentMode;
+import org.olat.course.assessment.AssessmentMode.Status;
+import org.olat.course.assessment.ui.AssessmentModeListModel.Cols;
+
+/**
+ * 
+ * Initial date: 30.01.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class AssessmentModeListModelSort extends SortableFlexiTableModelDelegate<AssessmentMode> {
+	
+	public AssessmentModeListModelSort(SortKey orderBy, SortableFlexiTableDataModel<AssessmentMode> tableModel, Locale locale) {
+		super(orderBy, tableModel, locale);
+	}
+
+	@Override
+	protected void sort(List<AssessmentMode> rows) {
+		int columnIndex = getColumnIndex();
+		Cols column = Cols.values()[columnIndex];
+		switch(column) {
+			case status: Collections.sort(rows, new StatusComparator()); break;
+			default: {
+				super.sort(rows);
+			}
+		}
+	}
+	
+	private static class StatusComparator implements Comparator<AssessmentMode> {
+		@Override
+		public int compare(AssessmentMode o1, AssessmentMode o2) {
+			Status s1 = o1.getStatus();
+			Status s2 = o2.getStatus();
+			
+			if(s1 == null) {
+				if(s2 == null) return 0;
+				return -1;
+			}
+			if(s2 == null) return 1;
+			
+			return s1.ordinal() - s2.ordinal();
+		}
+	}
+}
diff --git a/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html b/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html
index 4302cfa2e9d558a039d7f117d803c62b91ad0f07..91bfb6984b2f2e9c833262aa224bd646f3d489b3 100644
--- a/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html
+++ b/src/main/java/org/olat/course/assessment/ui/_content/choose_mode.html
@@ -2,10 +2,10 @@
 #foreach($mode in $guards.list)
 	<h2>$mode.name <small>$r.translate("current.mode.course", $mode.displayName)</small></h2>
 	<p><em>$r.translate("current.mode.datetimes", $mode.begin, $mode.end)</em>
-		#if(!$mode.leadTime.empty)
+		#if($mode.leadTime && !$mode.leadTime.empty)
 			<br/><em>$r.translate("current.mode.leadtime", $mode.leadTime)</em>
 		#end
-		#if(!$mode.followupTime.empty)
+		#if($mode.followupTime && !$mode.followupTime.empty)
 			<br/><em>$r.translate("current.mode.followuptime", $mode.followupTime)</em>
 		#end
 	</p>
diff --git a/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java b/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java
index 75864c0e707017a64cca8e75ef7cf57cb094433b..f0660329ac1cfdc4b4f381758848d3d1f1b3394d 100644
--- a/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java
+++ b/src/main/java/org/olat/gui/control/OlatDmzTopNavController.java
@@ -24,13 +24,12 @@
 */
 package org.olat.gui.control;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.chiefcontrollers.LanguageChooserController;
 import org.olat.core.commons.contextHelp.ContextHelpModule;
 import org.olat.core.commons.controllers.impressum.ImpressumDmzMainController;
 import org.olat.core.commons.controllers.impressum.ImpressumInformations;
 import org.olat.core.commons.controllers.impressum.ImpressumModule;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.commons.services.help.HelpLinkSPI;
 import org.olat.core.commons.services.help.HelpModule;
 import org.olat.core.gui.UserRequest;
@@ -48,7 +47,7 @@ import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
 import org.olat.core.id.OLATResourceable;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class OlatDmzTopNavController extends BasicController implements TopNavController {
+public class OlatDmzTopNavController extends BasicController implements LockableController {
 	
 	private static final Boolean contextHelpEnabled = Boolean.valueOf(ContextHelpModule.isContextHelpEnabled());
 	private Link impressumLink;
@@ -72,23 +71,19 @@ public class OlatDmzTopNavController extends BasicController implements TopNavCo
 		impressumLink.setAjaxEnabled(false);
 		impressumLink.setTarget("_blank");
 
-		
 		// help on login page
 		vc.contextPut("isContextHelpEnabled", contextHelpEnabled);
 		if (helpModule.isHelpEnabled()) {
-			HelpModule helpModule = CoreSpringFactory.getImpl(HelpModule.class);
 			HelpLinkSPI provider = helpModule.getHelpProvider();
 			Component helpLink = provider.getHelpPageLink(ureq, translate("help.manual"), translate("help.manual"), "o_icon o_icon-wf o_icon_manual", null, "Login page");
 			vc.put("topnav.help", helpLink);
-
 		}
 
 		//choosing language 
 		languageChooserC = new LanguageChooserController(getWindowControl(), ureq, "_top_nav_dmz_lang_chooser");
 		//DOKU:pb:2008-01 listenTo(languageChooserC); not necessary as LanguageChooser sends a MultiUserEvent
 		//which is catched by the BaseFullWebappController. This one is then 
-		//responsible to recreate the GUI with the new Locale 
-		//
+		//responsible to recreate the GUI with the new Locale
 		vc.put("languageChooser", languageChooserC.getInitialComponent());
 		putInitialPanel(vc);		
 	}
@@ -117,6 +112,7 @@ public class OlatDmzTopNavController extends BasicController implements TopNavCo
 		}
 	}
 
+	@Override
 	protected void doDispose() {
 		if (languageChooserC != null) {
 			languageChooserC.dispose();
diff --git a/src/main/java/org/olat/gui/control/OlatFooterController.java b/src/main/java/org/olat/gui/control/OlatFooterController.java
index 82f607334fbb3f128a60c67d0e60d3eeb16af04f..eb5e0f772ce5e764a471bd6de6ddb322699b334c 100644
--- a/src/main/java/org/olat/gui/control/OlatFooterController.java
+++ b/src/main/java/org/olat/gui/control/OlatFooterController.java
@@ -32,6 +32,7 @@ import org.olat.core.commons.controllers.impressum.ImpressumInformations;
 import org.olat.core.commons.controllers.impressum.ImpressumMainController;
 import org.olat.core.commons.controllers.impressum.ImpressumModule;
 import org.olat.core.commons.fullWebApp.BaseFullWebappController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
@@ -47,6 +48,7 @@ import org.olat.core.gui.control.creator.ControllerCreator;
 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.id.OLATResourceable;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.WebappHelper;
@@ -67,11 +69,14 @@ import org.springframework.beans.factory.annotation.Autowired;
  * 
  * @author patrickb
  */
-public class OlatFooterController extends BasicController { 
+public class OlatFooterController extends BasicController implements LockableController { 
 	
-	private Link impressumLink;
+	private final Link impressumLink;
 	private final VelocityContainer olatFootervc;
+	private ShareLinkController shareLinkCtr;
 	
+	@Autowired
+	private SocialModule socialModule;
 	@Autowired
 	private LayoutModule layoutModule;
 	@Autowired
@@ -92,11 +97,9 @@ public class OlatFooterController extends BasicController {
 		olatFootervc.put("userCounter", userCounter);
 
 		// share links
-		SocialModule socialModule = CoreSpringFactory.getImpl(SocialModule.class);
 		if (socialModule.isShareEnabled() && socialModule.getEnabledShareLinkButtons().size() > 0) {
-			Controller shareLinkCtr = new ShareLinkController(ureq, wControl);
-			listenTo(shareLinkCtr); // for auto-dispose
-			// push to view
+			shareLinkCtr = new ShareLinkController(ureq, wControl);
+			listenTo(shareLinkCtr);
 			olatFootervc.put("shareLink", shareLinkCtr.getInitialComponent());
 		}
 		
@@ -107,7 +110,6 @@ public class OlatFooterController extends BasicController {
 		impressumLink.setAjaxEnabled(false);
 		impressumLink.setTarget("_blank");
 
-
 		// Push information about user
 		if (!isGuest && ureq.getUserSession().isAuthenticated()) {
 			olatFootervc.contextPut("loggedIn", Boolean.TRUE);
@@ -138,6 +140,20 @@ public class OlatFooterController extends BasicController {
 		//
 	}
 
+	@Override
+	public void lockResource(OLATResourceable resource) {
+		if(shareLinkCtr != null) {
+			olatFootervc.remove(shareLinkCtr.getInitialComponent());
+		}
+	}
+
+	@Override
+	public void unlockResource() {
+		if(shareLinkCtr != null) {
+			olatFootervc.put("shareLink", shareLinkCtr.getInitialComponent());
+		}
+	}
+
 	@Override
 	public void event(UserRequest ureq, Component source, Event event) {
 		if(impressumLink == source) {
@@ -147,6 +163,7 @@ public class OlatFooterController extends BasicController {
 	
 	protected void doOpenImpressum(UserRequest ureq) {
 		ControllerCreator impressumControllerCreator = new ControllerCreator() {
+			@Override
 			public Controller createController(UserRequest lureq, WindowControl lwControl) {
 				return new ImpressumMainController(lureq, lwControl);
 			}
@@ -159,5 +176,4 @@ public class OlatFooterController extends BasicController {
 		}
 		popupBrowserWindow.open(ureq);
 	}
-
 }
diff --git a/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java b/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java
index 054c6884a6b619b1068c49784e51ea8fc3c5110c..be0f8bd7c57711c5496b648df5a96361c2bbf8dc 100644
--- a/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java
+++ b/src/main/java/org/olat/gui/control/OlatGuestTopNavController.java
@@ -31,7 +31,7 @@ import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.controllers.impressum.ImpressumInformations;
 import org.olat.core.commons.controllers.impressum.ImpressumMainController;
 import org.olat.core.commons.controllers.impressum.ImpressumModule;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.commons.services.help.HelpLinkSPI;
 import org.olat.core.commons.services.help.HelpModule;
 import org.olat.core.gui.UserRequest;
@@ -55,7 +55,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * 
  * @author patrickb
  */
-public class OlatGuestTopNavController extends BasicController implements TopNavController {
+public class OlatGuestTopNavController extends BasicController implements LockableController {
 
 	private Link loginLink, impressumLink;
 
diff --git a/src/main/java/org/olat/gui/control/OlatMinimalTopNavController.java b/src/main/java/org/olat/gui/control/OlatMinimalTopNavController.java
index c642fa2030ba51464bd1e861f70a18208f66e9f8..bc3769157b268f537fb2abbe871ff155a00cf21c 100644
--- a/src/main/java/org/olat/gui/control/OlatMinimalTopNavController.java
+++ b/src/main/java/org/olat/gui/control/OlatMinimalTopNavController.java
@@ -24,7 +24,7 @@
 */
 package org.olat.gui.control;
 
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.dispatcher.impl.StaticMediaDispatcher;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.Windows;
@@ -48,7 +48,7 @@ import org.olat.core.id.OLATResourceable;
  * Initial Date:  15.02.2008 <br>
  * @author patrickb
  */
-public class OlatMinimalTopNavController extends BasicController implements TopNavController {
+public class OlatMinimalTopNavController extends BasicController implements LockableController {
 
 	private final Link closeLink;
 
diff --git a/src/main/java/org/olat/gui/control/OlatTopNavController.java b/src/main/java/org/olat/gui/control/OlatTopNavController.java
index 4ec1c07a4eba90f3f8442cfd54ea4f112891f76a..a8248d0a310a5de8b8a43811839be0619262c557 100644
--- a/src/main/java/org/olat/gui/control/OlatTopNavController.java
+++ b/src/main/java/org/olat/gui/control/OlatTopNavController.java
@@ -27,7 +27,7 @@ import java.util.Set;
 import org.olat.admin.user.tools.UserTool;
 import org.olat.admin.user.tools.UserToolExtension;
 import org.olat.admin.user.tools.UserToolsModule;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.dispatcher.DispatcherModule;
 import org.olat.core.extensions.ExtManager;
 import org.olat.core.gui.UserRequest;
@@ -56,7 +56,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class OlatTopNavController extends BasicController implements TopNavController {
+public class OlatTopNavController extends BasicController implements LockableController {
 	
 	private Link loginLink;
 	private VelocityContainer topNavVC;
diff --git a/src/main/java/org/olat/gui/control/UserToolsMenuController.java b/src/main/java/org/olat/gui/control/UserToolsMenuController.java
index de9cb5434ee587120e3040b706f4ad9d1d8ae83f..28bb5b49b9ec78757543792279e2bb24bd738be7 100644
--- a/src/main/java/org/olat/gui/control/UserToolsMenuController.java
+++ b/src/main/java/org/olat/gui/control/UserToolsMenuController.java
@@ -29,7 +29,7 @@ import org.olat.admin.user.tools.UserToolCategory;
 import org.olat.admin.user.tools.UserToolExtension;
 import org.olat.admin.user.tools.UserToolsModule;
 import org.olat.basesecurity.AuthHelper;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.velocity.VelocityContainer;
@@ -48,7 +48,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class UserToolsMenuController extends BasicController implements TopNavController  {
+public class UserToolsMenuController extends BasicController implements LockableController  {
 
 	private static final String ACTION_LOGOUT = "logout";
 	
diff --git a/src/main/java/org/olat/login/AuthBFWCParts.java b/src/main/java/org/olat/login/AuthBFWCParts.java
index 11726e0d28054d1bd1bbad3db1b4ec45afe1ef8c..dd7e310d52348529fd82ca276c73b4f2b8d0f4c9 100644
--- a/src/main/java/org/olat/login/AuthBFWCParts.java
+++ b/src/main/java/org/olat/login/AuthBFWCParts.java
@@ -29,7 +29,7 @@ import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
@@ -53,14 +53,14 @@ public class AuthBFWCParts implements BaseFullWebappControllerParts {
 	 * @see org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts#createFooterController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public Controller createFooterController(UserRequest ureq, WindowControl wControl) {
+	public LockableController createFooterController(UserRequest ureq, WindowControl wControl) {
 		Controller footerCtr = null;
 		// ----------- footer, optional (e.g. for copyright, powerd by) ------------------
 		if (CoreSpringFactory.containsBean("fullWebApp.FooterControllerCreator")) {
 			ControllerCreator footerCreator = (ControllerCreator) CoreSpringFactory.getBean("fullWebApp.FooterControllerCreator");
 			footerCtr = footerCreator.createController(ureq, wControl);
 		}
-		return footerCtr;
+		return (LockableController)footerCtr;
 	}
 
 	/**
@@ -81,14 +81,14 @@ public class AuthBFWCParts implements BaseFullWebappControllerParts {
 	 * @see org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts#createTopNavController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl) {
+	public LockableController createTopNavController(UserRequest ureq, WindowControl wControl) {
 		Controller topnavCtr = null;
 		// ----------- topnav, optional (e.g. for imprint, logout) ------------------		
 		if (CoreSpringFactory.containsBean("fullWebApp.TopNavControllerCreator")) {
 			ControllerCreator topnavControllerCreator = (ControllerCreator) CoreSpringFactory.getBean("fullWebApp.TopNavControllerCreator");
 			topnavCtr = topnavControllerCreator.createController(ureq, wControl);
 		}
-		return (TopNavController)topnavCtr;
+		return (LockableController)topnavCtr;
 	}
 
 	/**
diff --git a/src/main/java/org/olat/login/DmzBFWCParts.java b/src/main/java/org/olat/login/DmzBFWCParts.java
index 5f04f4447d714562f9c648a2d79c147ffee63a3a..b76d908a60baa5b416e655766b1a3702c0b61e2d 100644
--- a/src/main/java/org/olat/login/DmzBFWCParts.java
+++ b/src/main/java/org/olat/login/DmzBFWCParts.java
@@ -28,7 +28,7 @@ import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
@@ -46,7 +46,7 @@ public class DmzBFWCParts implements BaseFullWebappControllerParts {
 	private boolean showTopNav = true; // default
 
 	@Override
-	public Controller createFooterController(UserRequest ureq, WindowControl wControl) {
+	public LockableController createFooterController(UserRequest ureq, WindowControl wControl) {
 		Controller footerCtr = null;
 		// ----------- footer, optional (e.g. for copyright, powered by) ------------------
 		if (CoreSpringFactory.containsBean("fullWebApp.DMZFooterControllerCreator")) {
@@ -55,7 +55,7 @@ public class DmzBFWCParts implements BaseFullWebappControllerParts {
 		} else {
 			footerCtr = new OlatFooterController(ureq,wControl);
 		}
-		return footerCtr;
+		return (LockableController)footerCtr;
 	}
 
 	@Override
@@ -70,12 +70,12 @@ public class DmzBFWCParts implements BaseFullWebappControllerParts {
 	}
 
 	@Override
-	public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl) {
+	public LockableController createTopNavController(UserRequest ureq, WindowControl wControl) {
 		if (showTopNav) {
-			TopNavController topNavCtr = null;
+			LockableController topNavCtr = null;
 			if (CoreSpringFactory.containsBean("fullWebApp.DMZTopNavControllerCreator")) {
 				ControllerCreator headerControllerCreator = (ControllerCreator)  CoreSpringFactory.getBean("fullWebApp.DMZTopNavControllerCreator");
-				topNavCtr = (TopNavController)headerControllerCreator.createController(ureq, wControl);
+				topNavCtr = (LockableController)headerControllerCreator.createController(ureq, wControl);
 			}
 			return topNavCtr;
 		} else {
diff --git a/src/main/java/org/olat/login/GuestBFWCParts.java b/src/main/java/org/olat/login/GuestBFWCParts.java
index adc2be7d853d638181e3622845126fea9e07a381..eb58f28bfc1093d46bce206be8e5b9d432755c04 100644
--- a/src/main/java/org/olat/login/GuestBFWCParts.java
+++ b/src/main/java/org/olat/login/GuestBFWCParts.java
@@ -29,7 +29,7 @@ import java.util.List;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts;
-import org.olat.core.commons.fullWebApp.TopNavController;
+import org.olat.core.commons.fullWebApp.LockableController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
@@ -55,7 +55,7 @@ public class GuestBFWCParts implements BaseFullWebappControllerParts {
 	 * @see org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts#createFooterController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public Controller createFooterController(UserRequest ureq, WindowControl wControl) {
+	public LockableController createFooterController(UserRequest ureq, WindowControl wControl) {
 		Controller footerCtr = null;
 		// ----------- footer, optional (e.g. for copyright, powered by) ------------------
 		if (CoreSpringFactory.containsBean("fullWebApp.GuestFooterControllerCreator")) {
@@ -64,7 +64,7 @@ public class GuestBFWCParts implements BaseFullWebappControllerParts {
 		} else {
 			footerCtr = new OlatFooterController(ureq,wControl);
 		}
-		return footerCtr;
+		return (LockableController)footerCtr;
 	}
 
 	/**
@@ -85,12 +85,12 @@ public class GuestBFWCParts implements BaseFullWebappControllerParts {
 	 * @see org.olat.core.commons.fullWebApp.BaseFullWebappControllerParts#createTopNavController(org.olat.core.gui.UserRequest, org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public TopNavController createTopNavController(UserRequest ureq, WindowControl wControl) {
+	public LockableController createTopNavController(UserRequest ureq, WindowControl wControl) {
 		if (showTopNav) {
-			TopNavController topNavCtr = null;
+			LockableController topNavCtr = null;
 			if (CoreSpringFactory.containsBean("fullWebApp.GuestTopNavControllerCreator")) {
 				ControllerCreator headerControllerCreator = (ControllerCreator)  CoreSpringFactory.getBean("fullWebApp.GuestTopNavControllerCreator");
-				topNavCtr = (TopNavController)headerControllerCreator.createController(ureq, wControl);
+				topNavCtr = (LockableController)headerControllerCreator.createController(ureq, wControl);
 			}
 			return topNavCtr;
 		} else {
diff --git a/src/main/java/org/olat/social/shareLink/ShareLinkController.java b/src/main/java/org/olat/social/shareLink/ShareLinkController.java
index a3896fb5bb80df9372eee8e6bc8bc4af4288c099..bf2ef1706e3b03e6821066c4937a7b519e485824 100644
--- a/src/main/java/org/olat/social/shareLink/ShareLinkController.java
+++ b/src/main/java/org/olat/social/shareLink/ShareLinkController.java
@@ -60,7 +60,7 @@ import org.olat.social.SocialModule;
  */
 
 public class ShareLinkController extends BasicController {
-	private VelocityContainer shareLinkVC;
+	private final VelocityContainer shareLinkVC;
 	
 	/**
 	 * Standard constructor for the share link controller
@@ -70,22 +70,17 @@ public class ShareLinkController extends BasicController {
 	public ShareLinkController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);
 		// For simplicity we use only one velocity template
-		this.shareLinkVC = createVelocityContainer("shareLink");
+		shareLinkVC = createVelocityContainer("shareLink");
 		// Add the OpenOLAT base URL from the config
 		shareLinkVC.contextPut("baseURL", Settings.getServerContextPathURI());
 		// Load configured share link buttons from the SocialModule configuration
 		SocialModule socialModule = (SocialModule) CoreSpringFactory.getBean("socialModule");
-		this.shareLinkVC.contextPut("shareLinks", socialModule.getEnabledShareLinkButtons());
+		shareLinkVC.contextPut("shareLinks", socialModule.getEnabledShareLinkButtons());
 		// Tell if user is logged in
-		this.shareLinkVC.contextPut("isUser", ureq.getUserSession().isAuthenticated() && !ureq.getUserSession().getRoles().isGuestOnly());
-		//
-		putInitialPanel(this.shareLinkVC);
+		shareLinkVC.contextPut("isUser", ureq.getUserSession().isAuthenticated() && !ureq.getUserSession().getRoles().isGuestOnly());
+		putInitialPanel(shareLinkVC);
 	}
 
-
-	/* (non-Javadoc)
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == shareLinkVC && event.getCommand().equals("setLandingPage") && ureq.getUserSession().isAuthenticated()) {
@@ -107,12 +102,8 @@ public class ShareLinkController extends BasicController {
 		}
 	}
 
-	/* (non-Javadoc)
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
 	@Override
 	protected void doDispose() {
 		// nothing to do
 	}
-
 }