diff --git a/uffd/group/views.py b/uffd/group/views.py
index 07f4ee00d92208a5f99cdc976e469c8b85d43550..cc4583ecb7eaccce5b46bcbf5b3e2f1099abc157 100644
--- a/uffd/group/views.py
+++ b/uffd/group/views.py
@@ -2,7 +2,7 @@ from flask import Blueprint, current_app, render_template
 
 from uffd.navbar import register_navbar
 from uffd.ldap import get_conn, escape_filter_chars
-from uffd.session import login_required
+from uffd.session import login_required, is_valid_session
 
 from .models import Group
 
@@ -14,7 +14,7 @@ def group_acl():
 	pass
 
 @bp.route("/")
-@register_navbar('Groups', icon='layer-group', blueprint=bp)
+@register_navbar('Groups', icon='layer-group', blueprint=bp, visible=is_valid_session)
 def group_list():
 	conn = get_conn()
 	conn.search(current_app.config["LDAP_BASE_GROUPS"], '(objectclass=groupOfUniqueNames)')
diff --git a/uffd/navbar.py b/uffd/navbar.py
index d3ff77d4e35da0c30b708434d7ed36b6adda80f4..462626a2b89c40c16b35087332ad03200b367042 100644
--- a/uffd/navbar.py
+++ b/uffd/navbar.py
@@ -9,7 +9,7 @@ def setup_navbar(app):
 # ( see: http://getbootstrap.com/components/#glyphicons )
 # or 'fa'
 # ( see: http://fontawesome.io/icons/ )
-def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None):
+def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None, visible=None):
 	def wrapper(func):
 		urlendpoint = endpoint
 		if not endpoint:
@@ -26,6 +26,7 @@ def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, bl
 		item['endpoint'] = urlendpoint
 		item['name'] = name
 		item['blueprint'] = blueprint
+		item['visible'] = visible
 		navbarList.append(item)
 		return func
 	return wrapper
diff --git a/uffd/selfservice/views.py b/uffd/selfservice/views.py
index a6204a5695b9cbb615ef6a468290cf01b38a744c..fe8e50354ab8c8cc23ed2fe0e2c1796d62235b2c 100644
--- a/uffd/selfservice/views.py
+++ b/uffd/selfservice/views.py
@@ -5,7 +5,7 @@ from uffd.csrf import csrf_protect
 
 from uffd.user.models import User
 from uffd.group.models import Group
-from uffd.session import get_current_user, login_required
+from uffd.session import get_current_user, login_required, is_valid_session
 from uffd.ldap import get_conn, escape_filter_chars
 
 bp = Blueprint("selfservice", __name__, template_folder='templates', url_prefix='/self/')
@@ -16,7 +16,7 @@ def self_acl():
 	pass
 
 @bp.route("/")
-@register_navbar('Selfservice', icon='portrait', blueprint=bp)
+@register_navbar('Selfservice', icon='portrait', blueprint=bp, visible=is_valid_session)
 def self_index():
 	return render_template('self.html', user=get_current_user())
 
diff --git a/uffd/session/__init__.py b/uffd/session/__init__.py
index 2009dfac27a084a878256dd63ac19ac73603f832..a7391f91f1b2289966aaefa00479469d8734b9a6 100644
--- a/uffd/session/__init__.py
+++ b/uffd/session/__init__.py
@@ -1,3 +1,3 @@
-from .views import bp as bp_ui, get_current_user, login_required, is_user_in_group
+from .views import bp as bp_ui, get_current_user, login_required, is_user_in_group, is_valid_session
 
 bp = [bp_ui]
diff --git a/uffd/session/views.py b/uffd/session/views.py
index d1364e40a8b243ae60337856c47e2e2318331edf..d65dc3fa9d94f292e8eddd7b63c87dde0fd6e302 100644
--- a/uffd/session/views.py
+++ b/uffd/session/views.py
@@ -10,7 +10,6 @@ from uffd.ldap import get_conn, user_conn, uid_to_dn
 
 bp = Blueprint("session", __name__, template_folder='templates', url_prefix='/')
 
-@register_navbar('Logout', icon='sign-out-alt', blueprint=bp)
 @bp.route("/logout")
 def logout():
 	session.clear()
@@ -34,7 +33,7 @@ def login():
 	user = User.from_ldap(conn.entries[0])
 	session['user_uid'] = user.uid
 	session['logintime'] = datetime.datetime.now().timestamp()
-	return redirect(url_for('index'))
+	return redirect(request.values.get('ref', url_for('index')))
 
 def get_current_user():
 	if not session.get('user_uid'):
@@ -49,16 +48,18 @@ def is_valid_session():
 		flash('Session timed out')
 		return False
 	return True
+bp.add_app_template_global(is_valid_session)
 
 def is_user_in_group(user, group):
 	return True
+bp.add_app_template_global(is_user_in_group)
 
 def login_required(view, group=None):
 	@functools.wraps(view)
 	def wrapped_view(**kwargs):
 		if not is_valid_session():
 			flash('You need to login first')
-			return redirect(url_for('session.login'))
+			return redirect(url_for('session.login', ref=request.url))
 		if not is_user_in_group(get_current_user, group):
 			flash('Access denied')
 			return redirect(url_for('index'))
diff --git a/uffd/templates/base.html b/uffd/templates/base.html
index 8e3db3000ffd2f52dc4ef1da6950f950c3f8af62..bc28ec2fd012260918fcca83c37cd50d6cd42518 100644
--- a/uffd/templates/base.html
+++ b/uffd/templates/base.html
@@ -42,7 +42,7 @@
 
 			<div class="collapse navbar-collapse" id="baseNavbar">
 				<ul class="navbar-nav mr-auto">
-					{% for n in navbar if (not n.group) %}
+					{% for n in navbar if (not n.group) and (not n.visible or n.visible()) %}
 					{{ navbaricon(n) }}
 					{% endfor %}
 
@@ -66,6 +66,16 @@
 					</li>
 					{% endfor %}
 				</ul>
+				{% if is_valid_session() %}
+				<ul class="navbar-nav ml-auto">
+					<li class="nav-item">
+						<a class="nav-link" href="{{ url_for("session.logout") }}">
+							<span aria-hidden="true" class="fa fa-sign-out-alt"></span>
+							Logout
+						</a>
+					</li>
+				</ul>
+				{% endif %}
 
 
 			</div>
diff --git a/uffd/user/views.py b/uffd/user/views.py
index ca0a78238f333261e2866eb11637e18375ab5851..ed38feaa2fb82815ea76373bd041fee36a0daea2 100644
--- a/uffd/user/views.py
+++ b/uffd/user/views.py
@@ -3,7 +3,7 @@ from flask import Blueprint, render_template, request, url_for, redirect, flash,
 from uffd.navbar import register_navbar
 from uffd.csrf import csrf_protect
 from uffd.ldap import get_conn, escape_filter_chars
-from uffd.session import login_required
+from uffd.session import login_required, is_valid_session
 
 from .models import User
 
@@ -15,7 +15,7 @@ def user_acl():
 	pass
 
 @bp.route("/")
-@register_navbar('Users', icon='users', blueprint=bp)
+@register_navbar('Users', icon='users', blueprint=bp, visible=is_valid_session)
 def user_list():
 	conn = get_conn()
 	conn.search(current_app.config["LDAP_BASE_USER"], '(objectclass=person)')