diff --git a/uffd/invite/views.py b/uffd/invite/views.py
index 7d1887be1cb20d260e7b718a070a7f2959bb2a80..d93dd892bddd3f65ec1041215cba5cd841a4e8b1 100644
--- a/uffd/invite/views.py
+++ b/uffd/invite/views.py
@@ -53,7 +53,7 @@ def reset_acl_filter(user):
 	return Invite.creator_dn == user.dn
 
 @bp.route('/')
-@register_navbar(lazy_gettext('Invites'), icon='link', blueprint=bp, visible=invite_acl)
+@register_navbar(14, lazy_gettext('Invites'), icon='link', blueprint=bp, visible=invite_acl)
 @invite_acl_required
 def index():
 	invites = Invite.query.filter(view_acl_filter(request.user)).all()
diff --git a/uffd/mail/views.py b/uffd/mail/views.py
index 0e5948d626a809bfa2fffed39514a04af4e6d8cd..9cc7e585ed9f7cf0f9762bd8a2646eaa57c1f2f3 100644
--- a/uffd/mail/views.py
+++ b/uffd/mail/views.py
@@ -20,7 +20,7 @@ def mail_acl_check():
 	return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP'])
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Forwardings'), icon='envelope', blueprint=bp, visible=mail_acl_check)
+@register_navbar(29, lazy_gettext('Forwardings'), icon='envelope', blueprint=bp, visible=mail_acl_check)
 def index():
 	return render_template('mail/list.html', mails=Mail.query.all())
 
diff --git a/uffd/navbar.py b/uffd/navbar.py
index e9b1f9ebc2854a10694b2c3e81ecc610aa3229b7..e01675971b5b4533e440a932265b43fbbb9c9b67 100644
--- a/uffd/navbar.py
+++ b/uffd/navbar.py
@@ -7,7 +7,8 @@ def setup_navbar(app):
 # or 'fa'
 # ( see: http://fontawesome.io/icons/ )
 # visible is a function that returns "True" if this icon should be visible in the calling context
-def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None, visible=None):
+# pylint: disable=too-many-arguments
+def register_navbar(position, name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None, visible=None):
 	def wrapper(func):
 		def deferred_call(state):
 			assert blueprint
@@ -27,7 +28,9 @@ def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, bl
 			item['name'] = name
 			item['blueprint'] = blueprint
 			item['visible'] = visible or (lambda: True)
+			item['position'] = position
 			state.app.navbarList.append(item)
+			state.app.navbarList.sort(key=lambda item: item['position'])
 		blueprint.record_once(deferred_call)
 		return func
 
diff --git a/uffd/role/views.py b/uffd/role/views.py
index 2e8f9d9fedd727913b5c7004e8c6c919a6d3bfa3..4c10a8b593f4cd9c03b78b1013d71f780a354d69 100644
--- a/uffd/role/views.py
+++ b/uffd/role/views.py
@@ -48,7 +48,7 @@ def role_acl_check():
 	return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP'])
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Roles'), icon='key', blueprint=bp, visible=role_acl_check)
+@register_navbar(25, lazy_gettext('Roles'), icon='key', blueprint=bp, visible=role_acl_check)
 def index():
 	return render_template('role/list.html', roles=Role.query.all())
 
diff --git a/uffd/rolemod/views.py b/uffd/rolemod/views.py
index 8a9c6051b73e6efd4cecb344b7144ed9bb2658ac..be60ee34207ddf864a379e621f4eac652d4ca941 100644
--- a/uffd/rolemod/views.py
+++ b/uffd/rolemod/views.py
@@ -22,7 +22,7 @@ def acl_check(): #pylint: disable=inconsistent-return-statements
 		return redirect(url_for('index'))
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Moderation'), icon='user-lock', blueprint=bp, visible=user_is_rolemod)
+@register_navbar(12, lazy_gettext('Moderation'), icon='user-lock', blueprint=bp, visible=user_is_rolemod)
 def index():
 	roles = Role.query.filter(Role.moderator_group_dn.in_(request.user.group_dns)).all()
 	return render_template('rolemod/list.html', roles=roles)
diff --git a/uffd/selfservice/views.py b/uffd/selfservice/views.py
index 82d745a4487f265b4430167ff056f86a1b05db98..ca1f0248e73d4b7d025a096689587a88239b0bf1 100644
--- a/uffd/selfservice/views.py
+++ b/uffd/selfservice/views.py
@@ -19,7 +19,7 @@ bp = Blueprint("selfservice", __name__, template_folder='templates', url_prefix=
 reset_ratelimit = Ratelimit('passwordreset', 1*60*60, 3)
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Selfservice'), icon='portrait', blueprint=bp, visible=lambda: bool(request.user))
+@register_navbar(0, lazy_gettext('Selfservice'), icon='portrait', blueprint=bp, visible=lambda: bool(request.user))
 @login_required()
 def index():
 	return render_template('selfservice/self.html', user=request.user)
diff --git a/uffd/services/views.py b/uffd/services/views.py
index 3423eba466fd77843e093ff77fd1d09abb84930f..c533cef34485171ce916de8a2ab4c2795ca17d43 100644
--- a/uffd/services/views.py
+++ b/uffd/services/views.py
@@ -80,7 +80,7 @@ def services_visible():
 	return len(get_services(request.user)) > 0
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Services'), icon='sitemap', blueprint=bp, visible=services_visible)
+@register_navbar(9, lazy_gettext('Services'), icon='sitemap', blueprint=bp, visible=services_visible)
 def index():
 	services = get_services(request.user)
 	if not current_app.config['SERVICES']:
diff --git a/uffd/user/views_group.py b/uffd/user/views_group.py
index c9c80fdef9676171b73fd50f77cd1100b6d30918..480a7b59bbccac2b449249b7d7d23faaccba5734 100644
--- a/uffd/user/views_group.py
+++ b/uffd/user/views_group.py
@@ -18,7 +18,7 @@ def group_acl_check():
 	return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP'])
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Groups'), icon='layer-group', blueprint=bp, visible=group_acl_check)
+@register_navbar(23, lazy_gettext('Groups'), icon='layer-group', blueprint=bp, visible=group_acl_check)
 def index():
 	return render_template('group/list.html', groups=Group.query.all())
 
diff --git a/uffd/user/views_user.py b/uffd/user/views_user.py
index db2800a87d56cea29a3940ff2770d4c0bbbee1b4..80e91b05849b1cb95057f943be8fa27c9951dbf9 100644
--- a/uffd/user/views_user.py
+++ b/uffd/user/views_user.py
@@ -26,7 +26,7 @@ def user_acl_check():
 	return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP'])
 
 @bp.route("/")
-@register_navbar(lazy_gettext('Users'), icon='users', blueprint=bp, visible=user_acl_check)
+@register_navbar(21, lazy_gettext('Users'), icon='users', blueprint=bp, visible=user_acl_check)
 def index():
 	return render_template('user/list.html', users=User.query.all())