diff --git a/src/ClientServer/Controllers/ControllerWithDb.cs b/src/ClientServer/Controllers/ControllerWithDb.cs
index 62485b9d8e59208a3f68110319465d39ab2314c1..0fdf20f28101b68b33f6a282abb6b54a4e1474f1 100644
--- a/src/ClientServer/Controllers/ControllerWithDb.cs
+++ b/src/ClientServer/Controllers/ControllerWithDb.cs
@@ -130,7 +130,7 @@ namespace ClientServer.Controllers
         /// <param name="onSessionEmptyAction">action when the user id was not found on the session, else null -&gt; login action</param>
         /// <param name="onDbResultEmptyAction">action when the db result was empty</param>
         /// <returns></returns>
-        public bool HasSystemPermission(Func<SystemRole, bool> checkPermissionFunc, Action onDbResultEmptyAction = null,
+        public async Task<bool> HasSystemPermission(Func<SystemRole, bool> checkPermissionFunc, Action onDbResultEmptyAction = null,
             Action onSessionEmptyAction = null)
         {
             //int? userId = HttpContext.Session.GetInt32(Constants.SessionUserIdKey);
@@ -147,11 +147,11 @@ namespace ClientServer.Controllers
             }
 
             //check if user has permission
-            User user = _context.Users
+            User user = await _context.Users
                 .Where(p => p.Id == userId)
                 .Include(p => p.SystemRole)
                 .Include(p => p.SystemRole.SystemRolePermission)
-                .FirstOrDefault();
+                .FirstOrDefaultAsync();
 
             if (user == null)
             {
diff --git a/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs b/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs
index 1863f3999b863f099e950963c2cc3e5fa7ac49b9..3e3a15f0dc87b1546b55b0f18f944a8831214fe3 100644
--- a/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs
+++ b/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs
@@ -25,6 +25,14 @@ namespace ClientServer.Controllers.Core
 
         }
 
+        /// <summary>
+        ///
+        ///
+        /// PERMISSION needs to be checked for every group (where the exercise is connected) individually)
+        /// </summary>
+        /// <param name="userId"></param>
+        /// <param name="pagination"></param>
+        /// <returns></returns>
         [HttpPost("all/{userId}")]
         public async Task GetAssessmentStatistics(int userId, [FromBody] PaginationPostData pagination)
         {
diff --git a/src/ClientServer/Controllers/Core/Exercises/PLangController.cs b/src/ClientServer/Controllers/Core/Exercises/PLangController.cs
index 56c2fe647b838e286e5e5b4575f67e16aed63456..d0581d294094d4ff6abbef68179a4f5606686d30 100644
--- a/src/ClientServer/Controllers/Core/Exercises/PLangController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/PLangController.cs
@@ -27,7 +27,7 @@ namespace ClientServer.Controllers.Core.Exercises
 
             //user needs permission
 
-            if (base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanChangeSystemSettings) ==
+            if (await HasSystemPermission(role => role != null && role.SystemRolePermission.CanChangeSystemSettings) ==
                 false)
             {
                 await
diff --git a/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs b/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs
index 1bf2cfa1d103038658e822baef9d3a53b5ba9c12..65d3ba4d42745fe2f0c89e613e3f221caba359d1 100644
--- a/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs
@@ -696,14 +696,6 @@ namespace ClientServer.Controllers.Core.Exercises
 
             int userId = GetUserId();
 
-
-            if (releaseId <= 0)
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.InvalidRequest, "invalid release id")));
-                return;
-            }
             
             //the user group that manages the exercise
             var targetUserGroup =
diff --git a/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs b/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
index 9dd5198d9bea85d063b8b53f8983238e8e095ae5..a46c28dac79da7c0125f2325aa14da7afb1e9609 100644
--- a/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
@@ -71,6 +71,28 @@ namespace ClientServer.Controllers.Core.Exercises
                     .FirstOrDefaultAsync(p => p.Id == releaseId)
                 ;
 
+            if (release == null)
+            {
+                await
+                    Response.WriteAsync(
+                        Jc.Serialize(new BasicResponse(ResponseCode.NotFound, "release not found")));
+                return;
+            }
+            
+            //the user group that manages the exercise
+            var targetUserGroup =
+                await _context.ExerciseReleases.Where(p => p.Id == release.Id)
+                    .Select(p => p.Exercise.UserGroupId)
+                    .FirstOrDefaultAsync();
+
+            if (!await base.HasGroupPermission(targetUserGroup,
+                permission => permission != null && permission.CanAssessExercises))
+            {
+                await
+                    Response.WriteAsync(
+                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
+                return;
+            }
 
             bool shouldGetPreAssessmentResults = false;
 
@@ -121,31 +143,6 @@ namespace ClientServer.Controllers.Core.Exercises
             }
 
 
-            if (release == null)
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NotFound, "release not found")));
-                return;
-            }
-
-
-            //the user group that manages the exercise
-            var targetUserGroup =
-                await _context.ExerciseReleases.Where(p => p.Id == release.Id)
-                    .Select(p => p.Exercise.UserGroupId)
-                    .FirstOrDefaultAsync();
-
-            if (!await base.HasGroupPermission(targetUserGroup,
-                permission => permission != null && permission.CanAssessExercises))
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
-                return;
-            }
-
-
             PaginatedData<AssessmentFullBase> assessments;
 
             if (shouldGetPreAssessmentResults)
@@ -181,6 +178,41 @@ namespace ClientServer.Controllers.Core.Exercises
             // because we use a link we don't get and need the csrf token...
             if (!await base.IsLoggedIn(null, false, true)) return;
 
+            var release = await _context.ExerciseReleases
+                    .Include(p => p.Exercise)
+                    .Include(p => p.ExerciseReleaseWithUserAsParticipations)
+                    .ThenInclude(p => p.User)
+                    .Include(p => p.ExerciseReleaseWithUserAsParticipations)
+                    .ThenInclude(p => p.Solutions)
+                    .ThenInclude(p => p.Assessment)
+                    .FirstOrDefaultAsync(p => p.GeneratedCode == releaseCode)
+                ;
+
+
+            if (release == null)
+            {
+                await
+                    Response.WriteAsync(
+                        Jc.Serialize(new BasicResponse(ResponseCode.NotFound, "release not found")));
+                return;
+            }
+            
+            //the user group that manages the exercise
+            var targetUserGroup =
+                await _context.ExerciseReleases.Where(p => p.Id == release.Id)
+                    .Select(p => p.Exercise.UserGroupId)
+                    .FirstOrDefaultAsync();
+
+            if (!await base.HasGroupPermission(targetUserGroup,
+                permission => permission != null && permission.CanAssessExercises))
+            {
+                await
+                    Response.WriteAsync(
+                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
+                return;
+            }
+            
+            
             if (csvDelimiter.Trim() == "") {
                 await
                     Response.WriteAsync(
@@ -548,26 +580,6 @@ namespace ClientServer.Controllers.Core.Exercises
             }
 
 
-            var release = await _context.ExerciseReleases
-                    .Include(p => p.Exercise)
-                    .Include(p => p.ExerciseReleaseWithUserAsParticipations)
-                    .ThenInclude(p => p.User)
-                    .Include(p => p.ExerciseReleaseWithUserAsParticipations)
-                    .ThenInclude(p => p.Solutions)
-                    .ThenInclude(p => p.Assessment)
-                    .FirstOrDefaultAsync(p => p.GeneratedCode == releaseCode)
-                ;
-
-
-            if (release == null)
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NotFound, "release not found")));
-                return;
-            }
-
-
             var pLangs = await _context.PLangs
                 .ToListAsync();
 
@@ -579,21 +591,6 @@ namespace ClientServer.Controllers.Core.Exercises
                 return;
             }
 
-            //the user group that manages the exercise
-            var targetUserGroup =
-                await _context.ExerciseReleases.Where(p => p.Id == release.Id)
-                    .Select(p => p.Exercise.UserGroupId)
-                    .FirstOrDefaultAsync();
-
-            if (!await base.HasGroupPermission(targetUserGroup,
-                permission => permission != null && permission.CanAssessExercises))
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
-                return;
-            }
-
 
             //get all
             var paginationData = new PaginationPostData()
diff --git a/src/ClientServer/Controllers/Core/Exercises/TagsController.cs b/src/ClientServer/Controllers/Core/Exercises/TagsController.cs
index 90a7ab41d92e5cb8083f71c3f35afe19fff294f3..44586ac79076ec143eb60031a118fd9732013c3a 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TagsController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TagsController.cs
@@ -63,7 +63,7 @@ namespace ClientServer.Controllers.Core.Exercises
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
+            if (await HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
             {
                 await
                     Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
@@ -136,7 +136,7 @@ namespace ClientServer.Controllers.Core.Exercises
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
+            if (await HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
             {
                 await
                     Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
@@ -214,7 +214,7 @@ namespace ClientServer.Controllers.Core.Exercises
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
+            if (await base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
             {
                 await
                     Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
@@ -327,7 +327,7 @@ namespace ClientServer.Controllers.Core.Exercises
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
+            if (await HasSystemPermission(role => role != null && role.SystemRolePermission.CanManageTags) == false)
             {
                 await
                     Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
diff --git a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
index a0ecd8c80faf39fa6aa1739ee2a7accc6a3bee1b..777b409f2ed7dfc2ba5aecb544c5bc2ee43fc64d 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
@@ -455,6 +455,8 @@ namespace ClientServer.Controllers.Core.Exercises
         public async Task GetAssessment(int exerciseReleaseId, int userId, int pLangId)
         {
             if (!await base.IsLoggedIn()) return;
+            
+            if (!await HasPermission(exerciseReleaseId)) return;
 
             //get all automatic assessments for this release
             var release = await _context.ExerciseReleases
@@ -472,21 +474,6 @@ namespace ClientServer.Controllers.Core.Exercises
                 return;
             }
 
-            //the user group that manages the exercise
-            var targetUserGroup =
-                await _context.ExerciseReleases.Where(p => p.Id == release.Id)
-                    .Select(p => p.Exercise.UserGroupId)
-                    .FirstOrDefaultAsync();
-
-            if (!await base.HasGroupPermission(targetUserGroup,
-                permission => permission != null && permission.CanAssessExercises))
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
-                return;
-            }
-
             var userReleaseParticipation = await _context.ExerciseReleaseWithUserAsParticipations.Where(p =>
                         p.ExerciseReleaseId == exerciseReleaseId
                         && p.UserId == userId
@@ -547,6 +534,8 @@ namespace ClientServer.Controllers.Core.Exercises
         {
             if (!await base.IsLoggedIn()) return;
 
+            
+            
             //get all automatic assessments for this release
             var release = await _context.ExerciseReleases
                     .Include(p => p.Exercise)
@@ -579,20 +568,7 @@ namespace ClientServer.Controllers.Core.Exercises
                 return;
             }
 
-            //the user group that manages the exercise
-            var targetUserGroup =
-                await _context.ExerciseReleases.Where(p => p.Id == release.Id)
-                    .Select(p => p.Exercise.UserGroupId)
-                    .FirstOrDefaultAsync();
-
-            if (!await base.HasGroupPermission(targetUserGroup,
-                permission => permission != null && permission.CanAssessExercises))
-            {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
-                return;
-            }
+            if (!await HasPermission(release.Id)) return;
 
             var userReleaseParticipation = await _context.ExerciseReleaseWithUserAsParticipations.Where(p =>
                         p.ExerciseReleaseId == assessmentFullBase.ExerciseReleaseId
@@ -652,7 +628,6 @@ namespace ClientServer.Controllers.Core.Exercises
             await
                 Response.WriteAsync(
                     Jc.Serialize(new BasicResponse(ResponseCode.Ok, "")));
-            return;
         }
     }
 }
diff --git a/src/ClientServer/Controllers/Core/Misc/LangController.cs b/src/ClientServer/Controllers/Core/Misc/LangController.cs
index 45e840ba769ef99a866ef873e9244f0edc5c72b7..6760c59e209df6bffdea7d33837b49a5fb203b28 100644
--- a/src/ClientServer/Controllers/Core/Misc/LangController.cs
+++ b/src/ClientServer/Controllers/Core/Misc/LangController.cs
@@ -30,7 +30,7 @@ namespace ClientServer.Controllers.Core.Exercises
 
             //user needs permission
 
-            if (base.HasSystemPermission(role => role != null && role.SystemRolePermission.CanChangeSystemSettings) ==
+            if (await HasSystemPermission(role => role != null && role.SystemRolePermission.CanChangeSystemSettings) ==
                 false)
             {
                 await
diff --git a/src/ClientServer/Controllers/Core/SystemSettingsController.cs b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
index 45c30477dcaeb0c79bc8488e49787b638c8dc7f2..4eb45f9ec1aafc0c15b697402fc2b882c790c3b6 100644
--- a/src/ClientServer/Controllers/Core/SystemSettingsController.cs
+++ b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
@@ -104,7 +104,7 @@ namespace ClientServer.Controllers.Core
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (base.HasSystemPermission(role =>
+            if (await HasSystemPermission(role =>
                     role != null && role.SystemRolePermission.CanChangeSystemSettings) == false)
             {
                 await
@@ -134,7 +134,7 @@ namespace ClientServer.Controllers.Core
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (base.HasSystemPermission(role =>
+            if (await HasSystemPermission(role =>
                     role != null && role.SystemRolePermission.CanChangeSystemSettings) == false)
             {
                 await
@@ -170,6 +170,15 @@ namespace ClientServer.Controllers.Core
         {
             if (!await base.IsLoggedIn()) return;
 
+            //this already checks if the user exists
+            if (await HasSystemPermission(role =>
+                    role != null && role.SystemRolePermission.CanChangeSystemSettings) == false)
+            {
+                await
+                    Response.WriteAsync(
+                        Jc.Serialize(new BasicResponse(ResponseCode.NotFound, "no permission")));
+                return;
+            }
 
             var settingsFromBackend = new SystemSettingsFromBackend()
             {
@@ -242,7 +251,7 @@ namespace ClientServer.Controllers.Core
             var userId = base.GetUserId();
 
             //this already checks if the user exists
-            if (base.HasSystemPermission(role =>
+            if (await HasSystemPermission(role =>
                     role != null && role.SystemRolePermission.CanChangeSystemSettings) == false)
             {
                 await
diff --git a/src/ClientServer/Controllers/Core/Users/GroupController.cs b/src/ClientServer/Controllers/Core/Users/GroupController.cs
index 3c7d1b2fa383b0c1409a97092820249cd437aeba..4db167eb32b3d5703d3455368e638120407d4a25 100644
--- a/src/ClientServer/Controllers/Core/Users/GroupController.cs
+++ b/src/ClientServer/Controllers/Core/Users/GroupController.cs
@@ -33,7 +33,7 @@ namespace ClientServer.Controllers.Core.Users
             int userId = GetUserId();
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanCreateGroups))
             {
                 await
@@ -170,7 +170,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanDeleteGroups))
             {
                 await
@@ -731,7 +731,7 @@ namespace ClientServer.Controllers.Core.Users
         /// <param name="userId">the user who wants to leave</param>
         /// <param name="userGroupRoleId">the current role of the user in the group</param>
         /// <returns>null: system settings not found (no creator role), true: user can leave, false: cannot leave</returns>
-        public async Task<bool?> HasGroupAtLeastOnCreator(int groupId, int userId, int userGroupRoleId)
+        private async Task<bool?> HasGroupAtLeastOnCreator(int groupId, int userId, int userGroupRoleId)
         {
             SystemSetting systemSetting = await _context.SystemSettings
                 .Include(p => p.DefaultGroupRole)
diff --git a/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs b/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs
index 4ed84ab6c944943f334496322595d2052cc44571..504098d788f9f0e94cf26bcee4afdd359238d178 100644
--- a/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs
+++ b/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs
@@ -30,7 +30,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null &&
                                   (
                                       permission.SystemRolePermission.CanCreateRoles
@@ -172,7 +172,7 @@ namespace ClientServer.Controllers.Core.Users
 
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanCreateRoles))
             {
                 await
@@ -248,7 +248,7 @@ namespace ClientServer.Controllers.Core.Users
 
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanChangeRoles))
             {
                 await
@@ -328,7 +328,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanDeleteRoles))
             {
                 await
diff --git a/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs b/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs
index cf9eac18f1fc0aa0421dd759fa7dfb6db54e5c41..325479b0a161a4cb699da3cf436284820d22e7fb 100644
--- a/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs
+++ b/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs
@@ -31,7 +31,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null &&
                                   (permission.SystemRolePermission.CanManageNewUsers
                                    || permission.SystemRolePermission.CanCreateRoles
@@ -89,7 +89,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null &&
                                   (permission.SystemRolePermission.CanManageNewUsers
                                    || permission.SystemRolePermission.CanCreateRoles
@@ -123,7 +123,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanCreateRoles))
             {
                 await
@@ -202,7 +202,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanChangeRoles))
             {
                 await
@@ -298,7 +298,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanDeleteRoles))
             {
                 await
diff --git a/src/ClientServer/Controllers/Core/Users/UsersController.cs b/src/ClientServer/Controllers/Core/Users/UsersController.cs
index b768c52eb8982480d399cd0e9b2e09b1b1f159ec..04ab0e5b2a9d5de8f851303e6d5ad379cfff8174 100644
--- a/src/ClientServer/Controllers/Core/Users/UsersController.cs
+++ b/src/ClientServer/Controllers/Core/Users/UsersController.cs
@@ -165,7 +165,7 @@ namespace ClientServer.Controllers.Core.Users
 
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     (permission) => permission != null && permission.SystemRolePermission.CanChangeUserData))
             {
                 await
@@ -240,7 +240,7 @@ namespace ClientServer.Controllers.Core.Users
 
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     (permission) => permission != null && permission.SystemRolePermission.CanChangeUserData))
             {
                 await
@@ -399,7 +399,7 @@ namespace ClientServer.Controllers.Core.Users
 
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     (permission) => permission != null && permission.SystemRolePermission.CanManageNewUsers))
             {
                 await
@@ -505,7 +505,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                    !HasSystemPermission(
+                    !await HasSystemPermission(
                         permission => permission != null && permission.SystemRolePermission.CanManageNewUsers))
                 //TODo or use permission can delete users??
             {
@@ -550,7 +550,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanManageNewUsers))
             {
                 await
@@ -577,7 +577,7 @@ namespace ClientServer.Controllers.Core.Users
             {
                 //check if the creating user is allowed to set the role...
                 if (
-                    !HasSystemPermission(
+                    !await HasSystemPermission(
                         permission =>
                             permission != null && permission.SystemRolePermission.CanChangeOtherUsersSystemRole))
                 {
@@ -635,7 +635,7 @@ namespace ClientServer.Controllers.Core.Users
             if (!await base.IsLoggedIn()) return;
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     (permission) => permission != null
                                     && (permission.SystemRolePermission.CanChangeOtherUsersSystemRole
                                         || permission.SystemRolePermission.CanDeleteActivatedUsers
@@ -748,7 +748,7 @@ namespace ClientServer.Controllers.Core.Users
             int ownId = GetUserId();
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanDeleteActivatedUsers))
             {
                 await
@@ -817,7 +817,7 @@ namespace ClientServer.Controllers.Core.Users
             int userId = GetUserId();
 
             if (
-                !HasSystemPermission(
+                !await HasSystemPermission(
                     permission => permission != null && permission.SystemRolePermission.CanChangeOtherUsersSystemRole))
             {
                 await
diff --git a/src/ClientServer/Controllers/dashboard/DashboardController.cs b/src/ClientServer/Controllers/dashboard/DashboardController.cs
index f2fac83896023c2cb59de9b21f23b46b7e6cb655..94635e275610d142d162f17f128ab68418dfb9f5 100644
--- a/src/ClientServer/Controllers/dashboard/DashboardController.cs
+++ b/src/ClientServer/Controllers/dashboard/DashboardController.cs
@@ -42,7 +42,7 @@ namespace ClientServer.Controllers
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (!base.HasSystemPermission(role =>
+            if (!await HasSystemPermission(role =>
                 role != null && role.SystemRolePermission != null && role.SystemRolePermission.CanViewDashboard))
             {
                 await
@@ -127,7 +127,7 @@ namespace ClientServer.Controllers
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (!base.HasSystemPermission(role =>
+            if (!await HasSystemPermission(role =>
                 role != null && role.SystemRolePermission != null && role.SystemRolePermission.CanViewDashboard))
             {
                 await
@@ -160,7 +160,7 @@ namespace ClientServer.Controllers
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (!base.HasSystemPermission(role =>
+            if (!await HasSystemPermission(role =>
                 role != null && role.SystemRolePermission != null && role.SystemRolePermission.CanViewDashboard))
             {
                 await
@@ -203,7 +203,7 @@ namespace ClientServer.Controllers
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (!base.HasSystemPermission(role =>
+            if (!await HasSystemPermission(role =>
                 role != null && role.SystemRolePermission != null && role.SystemRolePermission.CanViewDashboard))
             {
                 await
@@ -240,7 +240,7 @@ namespace ClientServer.Controllers
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (!base.HasSystemPermission(role =>
+            if (!await HasSystemPermission(role =>
                 role != null && role.SystemRolePermission != null && role.SystemRolePermission.CanViewDashboard))
             {
                 await Response.WriteAsync(
@@ -298,7 +298,7 @@ namespace ClientServer.Controllers
         {
             if (!await base.IsLoggedIn()) return;
 
-            if (!base.HasSystemPermission(role =>
+            if (!await HasSystemPermission(role =>
                 role != null && role.SystemRolePermission != null && role.SystemRolePermission.CanViewDashboard))
             {
                 await
diff --git a/src/ClientServer/Models/Users/SystemRolePermission.cs b/src/ClientServer/Models/Users/SystemRolePermission.cs
index b23795325e1e28f4f2e7816c55d9606a7e591a34..b9df0a6ab2f63e0b0795df9b6f5b20bcdf62aff7 100644
--- a/src/ClientServer/Models/Users/SystemRolePermission.cs
+++ b/src/ClientServer/Models/Users/SystemRolePermission.cs
@@ -40,6 +40,7 @@ namespace ClientServer.Models.Users
 
         /// <summary>
         /// true: can change user data (e.g. firstname, lastname...), false: not
+        /// TODO maybe combine CanChangeOtherUsersSystemRole, CanDeleteActivatedUsers, CanChangeUserData to CanManageActivatedUsers/CanManageOldUsers
         /// </summary>
         public bool CanChangeUserData { get; set; }
 
@@ -49,11 +50,13 @@ namespace ClientServer.Models.Users
         public bool CanManageNewUsers { get; set; }
         /// <summary>
         /// true: can change the group independent role (system role) of other users, false: not
+        /// TODO maybe combine CanChangeOtherUsersSystemRole, CanDeleteActivatedUsers, CanChangeUserData to CanManageActivatedUsers/CanManageOldUsers
         /// </summary>
         public bool CanChangeOtherUsersSystemRole { get; set; }
 
         /// <summary>
         /// true: can delete activated users, false: not
+        /// TODO maybe combine CanChangeOtherUsersSystemRole, CanDeleteActivatedUsers, CanChangeUserData to CanManageActivatedUsers/CanManageOldUsers
         /// </summary>
         public bool CanDeleteActivatedUsers { get; set; }