From 3c5f554f31a5e45ff2ee75ce07a9a0dbf2168368 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Janis=20Daniel=20Da=CC=88hne?=
 <janis.daehne2@student.uni-halle.de>
Date: Wed, 12 Jun 2019 17:12:27 +0200
Subject: [PATCH] - fixed issue where some release crud operations could be
 executed without permission - forgot to add file worker - renamed syndrom
 context (old) to yapex context - renamed column CanReleaseExercises to
 CanManageExerciseReleases in GroupRolePermissions

---
 .../Controllers/ControllerWithDb.cs           |   4 +-
 .../Core/AssessmentStatisticsController.cs    |   2 +-
 .../CustomProjectsOverviewController.cs       |   2 +-
 .../EditCustomProjectController.cs            |   2 +-
 .../DoExerciseAfterSolutionController.cs      |   2 +-
 .../Core/Exercises/DoExerciseController.cs    |   2 +-
 .../Core/Exercises/DownloadAssetController.cs |   2 +-
 .../Exercises/ExerciseEditorController.cs     |   2 +-
 .../Exercises/ExerciseOverviewController.cs   |  12 +-
 .../Core/Exercises/PLangController.cs         |   2 +-
 .../Core/Exercises/ReleaseController.cs       |  26 ++-
 .../Core/Exercises/SubmissionController.cs    |   2 +-
 .../Core/Exercises/TagsController.cs          |   2 +-
 .../Core/Exercises/TestTypesController.cs     |   2 +-
 .../TutorViewAssessmentController.cs          |   2 +-
 src/ClientServer/Controllers/Core/Init.cs     |  24 +--
 .../Controllers/Core/Login/AuthController.cs  |   2 +-
 .../Core/Login/AuthTokenController.cs         |   4 +-
 .../Controllers/Core/Misc/LangController.cs   |   2 +-
 .../Core/SystemSettingsController.cs          |   2 +-
 .../Core/Testing/TestingController.cs         |   2 +-
 .../Controllers/Core/TimeController.cs        |   2 +-
 .../Controllers/Core/Users/GroupController.cs |   8 +-
 .../Core/Users/GroupRolesController.cs        |  14 +-
 .../Core/Users/SystemRolesController.cs       |   2 +-
 .../Core/Users/UserSettingsController.cs      |   2 +-
 .../Controllers/Core/Users/UsersController.cs |   4 +-
 .../dashboard/DashboardController.cs          |   4 +-
 ...{SyndromDBContext.cs => YapexDbContext.cs} |  33 +--
 .../20160824181544_init.Designer.cs           |   2 +-
 .../20160827045350_init2.Designer.cs          |   2 +-
 ...160831154002_userSettingsTheme.Designer.cs |   2 +-
 .../20160903141707_init4.Designer.cs          |   2 +-
 .../20160906195429_init5.Designer.cs          |   2 +-
 .../20160921124646_final1.Designer.cs         |   2 +-
 .../20160921130105_final2.Designer.cs         |   2 +-
 .../20160921155214_final3.Designer.cs         |   2 +-
 .../20160923095756_final4.Designer.cs         |   2 +-
 .../20161001124636_tagPermission.Designer.cs  |   2 +-
 ...20161001140957_tagDisplayName2.Designer.cs |   2 +-
 ...0161001142650_deleteTagCascade.Designer.cs |   2 +-
 ...161220124855_ExerciseAddedNote.Designer.cs |   2 +-
 .../20170112222129_authTokens.Designer.cs     |   2 +-
 .../20170307190625_lang.Designer.cs           |   2 +-
 ...71009190359_tagBackgroundColor.Designer.cs |   2 +-
 .../20171009191709_tagDescription.Designer.cs |   2 +-
 .../20171012120923_tutorFreedback.Designer.cs |   2 +-
 ...nabledNullableAssessmentPoints.Designer.cs |   2 +-
 ...20171025160923_uniqueAuthToken.Designer.cs |   2 +-
 ...50_participationShouldNotCount.Designer.cs |   2 +-
 .../20171109144627_customProjects.Designer.cs |   2 +-
 ...3042_customProjectTestsWeights.Designer.cs |   2 +-
 ..._dashboardSystemRolePermission.Designer.cs |   2 +-
 ...0214130057_ReleaseEExamOptions.Designer.cs |   2 +-
 ...12957_ReleaseHideSiteHeaderBar.Designer.cs |   2 +-
 ...2160339_removeSolutionVersion1.Designer.cs |   2 +-
 ...2171554_removeSolutionVersion2.Designer.cs |   2 +-
 ...2182512_removeSolutionVersion3.Designer.cs |   2 +-
 ...3125543_removeSolutionVersion4.Designer.cs |   2 +-
 ...roupRolePermissionAndUpdatedAt.Designer.cs |   2 +-
 ...80929145343_addedAfterSolution.Designer.cs |   2 +-
 .../20181001151109_maxCustomTests.Designer.cs |   2 +-
 .../20181004180755_csrfToken.Designer.cs      |   2 +-
 ...04_UserSettingsAllowRemoveLang.Designer.cs |   2 +-
 ...edSystemPermissionCanEditGroup.Designer.cs |   2 +-
 ...1012124603_SetStringMaxLengths.Designer.cs |   2 +-
 .../20181026193143_ServerMessage.Designer.cs  |   2 +-
 ...ParticipationLockSolutionsFlag.Designer.cs |   2 +-
 ...articipationLockSolutionsFlag2.Designer.cs |   2 +-
 ...23151602_StoreAssessmentErrors.Designer.cs |   2 +-
 ...20190202125311_MoreExamOptions.Designer.cs |   2 +-
 ...190213174200_NewSystemSettings.Designer.cs |   2 +-
 ...190214140941_PLangHighlighting.Designer.cs |   2 +-
 ...0214151239_PLangFileExtensions.Designer.cs |   2 +-
 ...RemovedUnusedPlangMarkdownMode.Designer.cs |   2 +-
 ...20190320182329_TestAssetHashes.Designer.cs |   2 +-
 ...29152856_LastEditingIpSolution.Designer.cs |   2 +-
 ..._SystemSettingsTestServerUiUrl.Designer.cs |   2 +-
 ...0446_SomeDeleteActionsChanged1.Designer.cs |   2 +-
 .../20190419112922_JustRunTimeout.Designer.cs |   2 +-
 ...9153412_OtherJustRunTestLimits.Designer.cs |   2 +-
 ...100505_CustomProjectTestLimits.Designer.cs |   2 +-
 ...0190420164845_TestRunningTimes.Designer.cs |   2 +-
 ...reTestLimitsAndCompilerTimeout.Designer.cs |   2 +-
 ...20190430202149_MaxManualPoints.Designer.cs |   2 +-
 ...0501142551_HiddenTemplateFiles.Designer.cs |   2 +-
 ...43221_RenameTemplateVisibility.Designer.cs |   2 +-
 ...160702_ReleasePLangRequiredNow.Designer.cs |   2 +-
 ...0190505105057_ExerciseExamLock.Designer.cs |   2 +-
 ...rciseLockedGroupRolePermission.Designer.cs |   2 +-
 ...508134143_RemoveCopyPermission.Designer.cs |   2 +-
 ...30135332_ExerciseMarkdownFiles.Designer.cs |   2 +-
 ...1145551_ExerciseTestAssetFiles.Designer.cs |   2 +-
 ...20190602180648_CustomUserFiles.Designer.cs |   2 +-
 ...AssetPathsAddedCompilerOptions.Designer.cs |   2 +-
 .../SyndromDbContextModelSnapshot.cs          |   4 +-
 .../Models/CustomProjects/CustomProject.cs    |   2 +-
 .../CustomProjectDescription.cs               |   2 +-
 .../CustomProjectSolutionFile.cs              |   4 +-
 .../CustomProjects/CustomProjectTest.cs       |   4 +-
 .../CustomProjects/CustomProjectTestAsset.cs  |   6 +-
 ...stomProjectTestWithSolutionAsTestResult.cs |   6 +-
 .../AfterSolutions/AfterSolutionFile.cs       |   4 +-
 ...CustomTestWithAfterSolutionAsTestResult.cs |   6 +-
 .../TestWithAfterSolutionAsTestResult.cs      |   6 +-
 src/ClientServer/Models/Exercises/Asset.cs    |   6 +-
 src/ClientServer/Models/Exercises/Exercise.cs |   6 +-
 .../Models/Exercises/ExerciseDescription.cs   |   2 +-
 .../Exercises/Release/ExerciseRelease.cs      |   4 +-
 ...ustomTestWithSingleSolutionAsTestResult.cs |   6 +-
 .../Models/Exercises/Solution/Solution.cs     |   4 +-
 .../Exercises/Solution/SolutionAssessment.cs  |   6 +-
 .../Models/Exercises/Solution/SolutionFile.cs |   4 +-
 .../TestWithSingleSolutionAsTestResult.cs     |   6 +-
 src/ClientServer/Models/Exercises/Tag.cs      |  10 +-
 .../Models/Exercises/TemplateFile.cs          |   4 +-
 .../Models/Exercises/Tests/CustomTest.cs      |   4 +-
 .../Models/Exercises/Tests/CustomTestAsset.cs |   6 +-
 .../Tests/DefaultCustomTestSettings.cs        |   2 +-
 .../Models/Exercises/Tests/Test.cs            |   4 +-
 .../Models/Exercises/Tests/TestAsset.cs       |   6 +-
 .../Models/Exercises/Tests/TestSettings.cs    |   2 +-
 .../Models/Exercises/Tests/TestType.cs        |   4 +-
 .../Files/FileReferenceMarkdownAsset.cs       |   6 +-
 .../Models/Files/FileReferenceTestAsset.cs    |   6 +-
 .../Files/FileReferenceUserFileAsset.cs       |   6 +-
 src/ClientServer/Models/Lang.cs               |   4 +-
 src/ClientServer/Models/PLang.cs              |   8 +-
 src/ClientServer/Models/Users/AuthToken.cs    |   6 +-
 src/ClientServer/Models/Users/ExternalUser.cs |   8 +-
 src/ClientServer/Models/Users/GroupRole.cs    |   2 +-
 .../Models/Users/GroupRolePermission.cs       |   8 +-
 .../Users/Settings/CodeEditorSettings.cs      |   2 +-
 .../Models/Users/Settings/UserSetting.cs      |   2 +-
 src/ClientServer/Models/Users/SystemRole.cs   |   4 +-
 .../Models/Users/SystemSetting.cs             |  10 +-
 src/ClientServer/Models/Users/User.cs         |  10 +-
 src/ClientServer/Models/Users/UserGroup.cs    |   4 +-
 src/ClientServer/Startup.cs                   |   6 +-
 src/ClientServer/Workers/FileWorker.cs        | 195 ++++++++++++++++++
 src/ClientServer/Workers/ReleaseWorker.cs     |   4 +-
 .../Workers/SubmissionAssessmentWorker.cs     |  16 +-
 142 files changed, 460 insertions(+), 280 deletions(-)
 rename src/ClientServer/Db/{SyndromDBContext.cs => YapexDbContext.cs} (97%)
 create mode 100644 src/ClientServer/Workers/FileWorker.cs

diff --git a/src/ClientServer/Controllers/ControllerWithDb.cs b/src/ClientServer/Controllers/ControllerWithDb.cs
index 096bac3..62485b9 100644
--- a/src/ClientServer/Controllers/ControllerWithDb.cs
+++ b/src/ClientServer/Controllers/ControllerWithDb.cs
@@ -16,10 +16,10 @@ namespace ClientServer.Controllers
 {
     public class ControllerWithDb : Controller
     {
-        protected readonly SyndromDbContext _context;
+        protected readonly YapexDbContext _context;
 
 
-        public ControllerWithDb(SyndromDbContext context)
+        public ControllerWithDb(YapexDbContext context)
         {
             _context = context;
         }
diff --git a/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs b/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs
index 0f30f26..1863f39 100644
--- a/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs
+++ b/src/ClientServer/Controllers/Core/AssessmentStatisticsController.cs
@@ -20,7 +20,7 @@ namespace ClientServer.Controllers.Core
     [Route(Constants.ApiPrefix + "assessmentstatistics")]
     public class AssessmentStatisticsController : ControllerWithDb
     {
-        public AssessmentStatisticsController(SyndromDbContext context) : base(context)
+        public AssessmentStatisticsController(YapexDbContext context) : base(context)
         {
 
         }
diff --git a/src/ClientServer/Controllers/Core/CustomProjects/CustomProjectsOverviewController.cs b/src/ClientServer/Controllers/Core/CustomProjects/CustomProjectsOverviewController.cs
index f592c10..b34cfe9 100644
--- a/src/ClientServer/Controllers/Core/CustomProjects/CustomProjectsOverviewController.cs
+++ b/src/ClientServer/Controllers/Core/CustomProjects/CustomProjectsOverviewController.cs
@@ -19,7 +19,7 @@ namespace ClientServer.Controllers.Core.customProjects
     [Route(Constants.ApiPrefix + "custom/projects/overview")]
     public class CustomProjectsOverviewController : ControllerWithDb
     {
-        public CustomProjectsOverviewController(SyndromDbContext context) : base(context)
+        public CustomProjectsOverviewController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs b/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
index 01b4244..b1dbc39 100644
--- a/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
+++ b/src/ClientServer/Controllers/Core/CustomProjects/EditCustomProjectController.cs
@@ -20,7 +20,7 @@ namespace ClientServer.Controllers.Core.customProjects
     [Route(Constants.ApiPrefix + "custom/projects/edit")]
     public class EditCustomProjectController : ControllerWithDb
     {
-        public EditCustomProjectController(SyndromDbContext context) : base(context)
+        public EditCustomProjectController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
index 63ffb6a..537e39a 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseAfterSolution/DoExerciseAfterSolutionController.cs
@@ -27,7 +27,7 @@ namespace ClientServer.Controllers.Core.Exercises.DoExerciseAfterSolution
     [Route(Constants.ApiPrefix + "exercise/do/aftersolution")]
     public class DoExerciseAfterSolutionController : ControllerWithDb
     {
-        public DoExerciseAfterSolutionController(SyndromDbContext context) : base(context)
+        public DoExerciseAfterSolutionController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
index 9038691..66529cd 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DoExerciseController.cs
@@ -32,7 +32,7 @@ namespace ClientServer.Controllers.Core.Exercises
          */
 
 
-        public DoExerciseController(SyndromDbContext context) : base(context)
+        public DoExerciseController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/DownloadAssetController.cs b/src/ClientServer/Controllers/Core/Exercises/DownloadAssetController.cs
index 640deae..404f108 100644
--- a/src/ClientServer/Controllers/Core/Exercises/DownloadAssetController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/DownloadAssetController.cs
@@ -29,7 +29,7 @@ namespace ClientServer.Controllers.Core.Exercises
         
         
 
-        public DownloadAssetController(SyndromDbContext context) : base(context)
+        public DownloadAssetController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs b/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
index 2c85385..4b4aacc 100644
--- a/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
@@ -20,7 +20,7 @@ namespace ClientServer.Controllers.Core.Exercises
     [Route(Constants.ApiPrefix + "exercise/editor")]
     public class ExerciseEditorController : ControllerWithDb
     {
-        public ExerciseEditorController(SyndromDbContext context) : base(context)
+        public ExerciseEditorController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/ExerciseOverviewController.cs b/src/ClientServer/Controllers/Core/Exercises/ExerciseOverviewController.cs
index fd39357..253993b 100644
--- a/src/ClientServer/Controllers/Core/Exercises/ExerciseOverviewController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/ExerciseOverviewController.cs
@@ -25,7 +25,7 @@ namespace ClientServer.Controllers.Core.Exercises
     {
         public static List<string> possibleLogicalConnectors = new List<string>() {"and", "or"};
 
-        public ExerciseOverviewController(SyndromDbContext context) : base(context)
+        public ExerciseOverviewController(YapexDbContext context) : base(context)
         {
         }
 
@@ -584,7 +584,7 @@ namespace ClientServer.Controllers.Core.Exercises
                              || p.GroupRole.GroupRolePermission.CanChangeExercises
                              || p.GroupRole.GroupRolePermission.CanDeleteExercises
                              || p.GroupRole.GroupRolePermission.CanAssessExercises
-                             || p.GroupRole.GroupRolePermission.CanReleaseExercises
+                             || p.GroupRole.GroupRolePermission.CanManageExerciseReleases
                              || p.GroupRole.GroupRolePermission.CanSeeExercisesFromOthersInGroup
                          )
                 )
@@ -605,7 +605,7 @@ namespace ClientServer.Controllers.Core.Exercises
                         canChangeExercises: p.GroupRole.GroupRolePermission.CanChangeExercises,
                         canCreateExercises: p.GroupRole.GroupRolePermission.CanCreateExercises,
                         canAssessExercises: p.GroupRole.GroupRolePermission.CanAssessExercises,
-                        canReleaseExercises: p.GroupRole.GroupRolePermission.CanReleaseExercises,
+                        canReleaseExercises: p.GroupRole.GroupRolePermission.CanManageExerciseReleases,
                         canDeleteExercises: p.GroupRole.GroupRolePermission.CanDeleteExercises,
                         canAddUserToGroup: p.GroupRole.GroupRolePermission.CanAddUserToGroup,
                         canLockExercisesPermanently: p.GroupRole.GroupRolePermission.CanLockExercisesPermanently,
@@ -651,7 +651,7 @@ namespace ClientServer.Controllers.Core.Exercises
                                                                      || p.GroupRole.GroupRolePermission
                                                                          .CanAssessExercises
                                                                      || p.GroupRole.GroupRolePermission
-                                                                         .CanReleaseExercises
+                                                                         .CanManageExerciseReleases
                                                                      || p.GroupRole.GroupRolePermission
                                                                          .CanSeeExercisesFromOthersInGroup
                                                                  ))
@@ -1084,7 +1084,7 @@ namespace ClientServer.Controllers.Core.Exercises
                 || groupPermission.CanChangeExercises
                 || groupPermission.CanDeleteExercises
                 || groupPermission.CanAssessExercises
-                || groupPermission.CanReleaseExercises
+                || groupPermission.CanManageExerciseReleases
                 || groupPermission.CanSeeExercisesFromOthersInGroup
                 || exercise.UserId == userId //or it's our own exercise
             )
@@ -1144,7 +1144,7 @@ namespace ClientServer.Controllers.Core.Exercises
                     canCreateExercises: managingGroupConnection.GroupRole.GroupRolePermission.CanCreateExercises,
                     canAssessExercises: managingGroupConnection.GroupRole.GroupRolePermission.CanAssessExercises,
                     canDeleteExercises: managingGroupConnection.GroupRole.GroupRolePermission.CanDeleteExercises,
-                    canReleaseExercises: managingGroupConnection.GroupRole.GroupRolePermission.CanReleaseExercises,
+                    canReleaseExercises: managingGroupConnection.GroupRole.GroupRolePermission.CanManageExerciseReleases,
                     canAddUserToGroup: managingGroupConnection.GroupRole.GroupRolePermission.CanAddUserToGroup,
                     canLockExercisesPermanently: managingGroupConnection.GroupRole.GroupRolePermission
                         .CanLockExercisesPermanently,
diff --git a/src/ClientServer/Controllers/Core/Exercises/PLangController.cs b/src/ClientServer/Controllers/Core/Exercises/PLangController.cs
index 7a7640e..56c2fe6 100644
--- a/src/ClientServer/Controllers/Core/Exercises/PLangController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/PLangController.cs
@@ -17,7 +17,7 @@ namespace ClientServer.Controllers.Core.Exercises
     [Route(Constants.ApiPrefix + "plangs")]
     public class PLangController : ControllerWithDb
     {
-        public PLangController(SyndromDbContext context) : base(context)
+        public PLangController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs b/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs
index a6fdd5b..1bf2cfa 100644
--- a/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/ReleaseController.cs
@@ -19,7 +19,7 @@ namespace ClientServer.Controllers.Core.Exercises
     [Route(Constants.ApiPrefix + "exercise/releases")]
     public class ReleaseController : ControllerWithDb
     {
-        public ReleaseController(SyndromDbContext context) : base(context)
+        public ReleaseController(YapexDbContext context) : base(context)
         {
         }
 
@@ -52,7 +52,7 @@ namespace ClientServer.Controllers.Core.Exercises
                     .FirstOrDefaultAsync();
 
             if (!await base.HasGroupPermission(targetUserGroup,
-                permission => permission != null && permission.CanReleaseExercises))
+                permission => permission != null && permission.CanManageExerciseReleases))
             {
                 await
                     Response.WriteAsync(
@@ -313,11 +313,11 @@ namespace ClientServer.Controllers.Core.Exercises
                     .FirstOrDefaultAsync();
 
             if (!await base.HasGroupPermission(targetUserGroup,
-                permission => permission != null && permission.CanReleaseExercises))
+                permission => permission != null && permission.CanManageExerciseReleases))
             {
                 await
                     Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "not permission")));
+                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
                 return;
             }
 
@@ -704,7 +704,21 @@ namespace ClientServer.Controllers.Core.Exercises
                         Jc.Serialize(new BasicResponse(ResponseCode.InvalidRequest, "invalid release id")));
                 return;
             }
+            
+            //the user group that manages the exercise
+            var targetUserGroup =
+                await _context.ExerciseReleases.Where(p => p.Id == releaseId)
+                    .Select(p => p.Exercise.UserGroupId)
+                    .FirstOrDefaultAsync();
 
+            if (!await base.HasGroupPermission(targetUserGroup,
+                permission => permission != null && permission.CanManageExerciseReleases))
+            {
+                await
+                    Response.WriteAsync(
+                        Jc.Serialize(new BasicResponse(ResponseCode.NoPermission, "no permission")));
+                return;
+            }
 
             var release = await _context.ExerciseReleases
                 .FirstOrDefaultAsync(p => p.Id == releaseId);
@@ -799,7 +813,7 @@ namespace ClientServer.Controllers.Core.Exercises
 
             if (!await base.HasGroupPermission(targetUserGroup,
                 permission => permission != null &&
-                              (permission.CanReleaseExercises || permission.CanAssessExercises
+                              (permission.CanManageExerciseReleases || permission.CanAssessExercises
                               )
             ))
             {
@@ -988,7 +1002,7 @@ namespace ClientServer.Controllers.Core.Exercises
 
             if (!await base.HasGroupPermission(targetUserGroup,
                 permission => permission != null &&
-                              (permission.CanReleaseExercises || permission.CanAssessExercises
+                              (permission.CanManageExerciseReleases || permission.CanAssessExercises
                               )
             ))
             {
diff --git a/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs b/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
index 1bbfd87..9dd5198 100644
--- a/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
@@ -42,7 +42,7 @@ namespace ClientServer.Controllers.Core.Exercises
         /// </summary>
         public readonly static string DefaultSubmissionWithCodeTemplatesDirName = "template";
 
-        public SubmissionController(SyndromDbContext context) : base(context)
+        public SubmissionController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/TagsController.cs b/src/ClientServer/Controllers/Core/Exercises/TagsController.cs
index fe2887a..90a7ab4 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TagsController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TagsController.cs
@@ -17,7 +17,7 @@ namespace ClientServer.Controllers.Core.Exercises
     [Route(Constants.ApiPrefix + "tags")]
     public class TagsController : ControllerWithDb
     {
-        public TagsController(SyndromDbContext context) : base(context)
+        public TagsController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/TestTypesController.cs b/src/ClientServer/Controllers/Core/Exercises/TestTypesController.cs
index 564dd36..110c605 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TestTypesController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TestTypesController.cs
@@ -18,7 +18,7 @@ namespace ClientServer.Controllers.Core.Exercises
     [Route(Constants.ApiPrefix + "testtypes")]
     public class TestTypesController : ControllerWithDb
     {
-        public TestTypesController(SyndromDbContext context) : base(context)
+        public TestTypesController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
index 4a2cec3..a0ecd8c 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
@@ -24,7 +24,7 @@ namespace ClientServer.Controllers.Core.Exercises
     [Route(Constants.ApiPrefix + "tutor/view/assessment")]
     public class TutorViewAssessmentController : ControllerWithDb
     {
-        public TutorViewAssessmentController(SyndromDbContext context) : base(context)
+        public TutorViewAssessmentController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Init.cs b/src/ClientServer/Controllers/Core/Init.cs
index 1b6821f..e136241 100644
--- a/src/ClientServer/Controllers/Core/Init.cs
+++ b/src/ClientServer/Controllers/Core/Init.cs
@@ -23,10 +23,10 @@ namespace ClientServer.Controllers.Core
     [Route(Constants.InitControllerAbsolutePath)]
     public class Init : Controller
     {
-        private readonly SyndromDbContext _context;
+        private readonly YapexDbContext _context;
 
 
-        public Init(SyndromDbContext context)
+        public Init(YapexDbContext context)
         {
             _context = context;
         }
@@ -340,10 +340,10 @@ namespace ClientServer.Controllers.Core
                                 {
                                     OriginalName = descriptionAsset.DisplayName,
                                     CreatedAt = (DateTime) _context.Entry(descriptionAsset)
-                                        .Property(SyndromDbContext.CreatedAt)
+                                        .Property(YapexDbContext.CreatedAt)
                                         .CurrentValue,
                                     LastUpdatedAt = (DateTime) _context.Entry(descriptionAsset)
-                                        .Property(SyndromDbContext.LastUpdatedAt).CurrentValue,
+                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
                                     MimeType = descriptionAsset.MimeType,
                                     SizeInBytes = descriptionAsset.Content.Length,
                                     Hash = "",
@@ -508,10 +508,10 @@ namespace ClientServer.Controllers.Core
                                 {
                                     OriginalName = testAsset.DisplayName,
                                     CreatedAt = (DateTime) _context.Entry(testAsset)
-                                        .Property(SyndromDbContext.CreatedAt)
+                                        .Property(YapexDbContext.CreatedAt)
                                         .CurrentValue,
                                     LastUpdatedAt = (DateTime) _context.Entry(testAsset)
-                                        .Property(SyndromDbContext.LastUpdatedAt).CurrentValue,
+                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
                                     MimeType = testAsset.MimeType,
                                     SizeInBytes = testAsset.Content.Length,
                                     Hash = "",
@@ -616,10 +616,10 @@ namespace ClientServer.Controllers.Core
                                 {
                                     OriginalName = customTestAsset.DisplayName,
                                     CreatedAt = (DateTime) _context.Entry(customTestAsset)
-                                        .Property(SyndromDbContext.CreatedAt)
+                                        .Property(YapexDbContext.CreatedAt)
                                         .CurrentValue,
                                     LastUpdatedAt = (DateTime) _context.Entry(customTestAsset)
-                                        .Property(SyndromDbContext.LastUpdatedAt).CurrentValue,
+                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
                                     MimeType = customTestAsset.MimeType,
                                     SizeInBytes = customTestAsset.Content.Length,
                                     Hash = "",
@@ -725,10 +725,10 @@ namespace ClientServer.Controllers.Core
                                 {
                                     OriginalName = customAsset.DisplayName,
                                     CreatedAt = (DateTime) _context.Entry(customAsset)
-                                        .Property(SyndromDbContext.CreatedAt)
+                                        .Property(YapexDbContext.CreatedAt)
                                         .CurrentValue,
                                     LastUpdatedAt = (DateTime) _context.Entry(customAsset)
-                                        .Property(SyndromDbContext.LastUpdatedAt).CurrentValue,
+                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
                                     MimeType = customAsset.MimeType,
                                     SizeInBytes = customAsset.Content.Length,
                                     Hash = "",
@@ -894,10 +894,10 @@ namespace ClientServer.Controllers.Core
                                 {
                                     OriginalName = customProjectTestAsset.DisplayName,
                                     CreatedAt = (DateTime) _context.Entry(customProjectTestAsset)
-                                        .Property(SyndromDbContext.CreatedAt)
+                                        .Property(YapexDbContext.CreatedAt)
                                         .CurrentValue,
                                     LastUpdatedAt = (DateTime) _context.Entry(customProjectTestAsset)
-                                        .Property(SyndromDbContext.LastUpdatedAt).CurrentValue,
+                                        .Property(YapexDbContext.LastUpdatedAt).CurrentValue,
                                     MimeType = customProjectTestAsset.MimeType,
                                     SizeInBytes = customProjectTestAsset.Content.Length,
                                     Hash = "",
diff --git a/src/ClientServer/Controllers/Core/Login/AuthController.cs b/src/ClientServer/Controllers/Core/Login/AuthController.cs
index 1e0c535..a69354d 100644
--- a/src/ClientServer/Controllers/Core/Login/AuthController.cs
+++ b/src/ClientServer/Controllers/Core/Login/AuthController.cs
@@ -24,7 +24,7 @@ namespace ClientServer.Controllers.Core.Login
     //[EnableCors("CorsPolicy")]
     public class AuthController : ControllerWithDb
     {
-        public AuthController(SyndromDbContext context) : base(context)
+        public AuthController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs b/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs
index 2c0356e..4a942a7 100644
--- a/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs
+++ b/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs
@@ -25,7 +25,7 @@ namespace ClientServer.Controllers.Core.Login
         }
 
 
-        public AuthTokenController(SyndromDbContext context) : base(context)
+        public AuthTokenController(YapexDbContext context) : base(context)
         {
         }
 
@@ -125,7 +125,7 @@ namespace ClientServer.Controllers.Core.Login
         /// <param name="oldToken"></param>
         /// <param name="_context"></param>
         /// <returns></returns>
-        public static async Task<string> _ExtendTokenLifetime(int userId, AuthToken oldToken, SyndromDbContext _context)
+        public static async Task<string> _ExtendTokenLifetime(int userId, AuthToken oldToken, YapexDbContext _context)
         {
             Contract.Requires(_context.Users.Any(p => p.Id == userId));
 
diff --git a/src/ClientServer/Controllers/Core/Misc/LangController.cs b/src/ClientServer/Controllers/Core/Misc/LangController.cs
index 02adddf..45e840b 100644
--- a/src/ClientServer/Controllers/Core/Misc/LangController.cs
+++ b/src/ClientServer/Controllers/Core/Misc/LangController.cs
@@ -20,7 +20,7 @@ namespace ClientServer.Controllers.Core.Exercises
     {
         static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1);
 
-        public LangController(SyndromDbContext context) : base(context)
+        public LangController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/SystemSettingsController.cs b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
index a8ca00e..45c3047 100644
--- a/src/ClientServer/Controllers/Core/SystemSettingsController.cs
+++ b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
@@ -35,7 +35,7 @@ namespace ClientServer.Controllers.Core
             HardCompileTimeoutInMs = -1,
         };
 
-        public SystemSettingsController(SyndromDbContext context) : base(context)
+        public SystemSettingsController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Testing/TestingController.cs b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
index a6b18be..a71f5c5 100644
--- a/src/ClientServer/Controllers/Core/Testing/TestingController.cs
+++ b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
@@ -72,7 +72,7 @@ namespace ClientServer.Controllers.Core.Testing
         //private static string TestServerApiUrl = "http://192.168.145.128:8001/api.php";
 
 
-        public TestingController(SyndromDbContext context) : base(context)
+        public TestingController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/TimeController.cs b/src/ClientServer/Controllers/Core/TimeController.cs
index 1d23522..745c6ad 100644
--- a/src/ClientServer/Controllers/Core/TimeController.cs
+++ b/src/ClientServer/Controllers/Core/TimeController.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Controllers.Core
     [Route(Constants.ApiPrefix + "time")]
     public class TimeController : ControllerWithDb
     {
-        public TimeController(SyndromDbContext context) : base(context)
+        public TimeController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Users/GroupController.cs b/src/ClientServer/Controllers/Core/Users/GroupController.cs
index fc6cbe2..3c7d1b2 100644
--- a/src/ClientServer/Controllers/Core/Users/GroupController.cs
+++ b/src/ClientServer/Controllers/Core/Users/GroupController.cs
@@ -17,7 +17,7 @@ namespace ClientServer.Controllers.Core.Users
     [Route(Constants.ApiPrefix + "groups")]
     public class GroupController : ControllerWithDb
     {
-        public GroupController(SyndromDbContext context) : base(context)
+        public GroupController(YapexDbContext context) : base(context)
         {
         }
 
@@ -321,7 +321,7 @@ namespace ClientServer.Controllers.Core.Users
                         canChangeExercises: userWithUserGroup.GroupRole.GroupRolePermission.CanChangeExercises,
                         canCreateExercises: userWithUserGroup.GroupRole.GroupRolePermission.CanCreateExercises,
                         canAssessExercises: userWithUserGroup.GroupRole.GroupRolePermission.CanAssessExercises,
-                        canReleaseExercises: userWithUserGroup.GroupRole.GroupRolePermission.CanReleaseExercises,
+                        canReleaseExercises: userWithUserGroup.GroupRole.GroupRolePermission.CanManageExerciseReleases,
                         canDeleteExercises: userWithUserGroup.GroupRole.GroupRolePermission.CanDeleteExercises,
                         canAddUserToGroup: userWithUserGroup.GroupRole.GroupRolePermission.CanAddUserToGroup,
                         canLockExercisesPermanently: userWithUserGroup.GroupRole.GroupRolePermission.CanLockExercisesPermanently,
@@ -393,7 +393,7 @@ namespace ClientServer.Controllers.Core.Users
                             canChangeExercises: connection.GroupRole.GroupRolePermission.CanChangeExercises,
                             canCreateExercises: connection.GroupRole.GroupRolePermission.CanCreateExercises,
                             canAssessExercises: connection.GroupRole.GroupRolePermission.CanAssessExercises,
-                            canReleaseExercises: connection.GroupRole.GroupRolePermission.CanReleaseExercises,
+                            canReleaseExercises: connection.GroupRole.GroupRolePermission.CanManageExerciseReleases,
                             canDeleteExercises: connection.GroupRole.GroupRolePermission.CanDeleteExercises,
                             canAddUserToGroup: connection.GroupRole.GroupRolePermission.CanAddUserToGroup,
                             canLockExercisesPermanently: connection.GroupRole.GroupRolePermission.CanLockExercisesPermanently,
@@ -987,7 +987,7 @@ namespace ClientServer.Controllers.Core.Users
                 canChangeExercises: groupRole.GroupRolePermission.CanChangeExercises,
                 canDeleteExercises: groupRole.GroupRolePermission.CanDeleteExercises,
                 canLockExercisesPermanently: connection.GroupRole.GroupRolePermission.CanLockExercisesPermanently,
-                canReleaseExercises: groupRole.GroupRolePermission.CanReleaseExercises,
+                canReleaseExercises: groupRole.GroupRolePermission.CanManageExerciseReleases,
                 canRemoveMemberFromGroup: groupRole.GroupRolePermission.CanRemoveMemberFromGroup,
                 canSeeExercisesFromOthersInGroup: groupRole.GroupRolePermission.CanSeeExercisesFromOthersInGroup,
                 canSeeOtherMembers: connection.GroupRole.GroupRolePermission.CanSeeOtherMembers,
diff --git a/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs b/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs
index efc40b8..4ed84ab 100644
--- a/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs
+++ b/src/ClientServer/Controllers/Core/Users/GroupRolesController.cs
@@ -17,7 +17,7 @@ namespace ClientServer.Controllers.Core.Users
     [Route(Constants.ApiPrefix + "grouproles")]
     public class GroupRolesController : ControllerWithDb
     {
-        public GroupRolesController(SyndromDbContext context) : base(context)
+        public GroupRolesController(YapexDbContext context) : base(context)
         {
         }
 
@@ -76,7 +76,7 @@ namespace ClientServer.Controllers.Core.Users
                     canChangeExercises: groupRole.GroupRolePermission.CanChangeExercises,
                     canDeleteExercises: groupRole.GroupRolePermission.CanDeleteExercises,
                     canLockExercisesPermanently: groupRole.GroupRolePermission.CanLockExercisesPermanently,
-                    canReleaseExercises: groupRole.GroupRolePermission.CanReleaseExercises,
+                    canReleaseExercises: groupRole.GroupRolePermission.CanManageExerciseReleases,
                     canRemoveMemberFromGroup: groupRole.GroupRolePermission.CanRemoveMemberFromGroup,
                     canSeeExercisesFromOthersInGroup: groupRole.GroupRolePermission.CanSeeExercisesFromOthersInGroup,
                     canSeeOtherMembers: groupRole.GroupRolePermission.CanSeeOtherMembers,
@@ -146,7 +146,7 @@ namespace ClientServer.Controllers.Core.Users
                     canChangeExercises: groupRole.GroupRolePermission.CanChangeExercises,
                     canDeleteExercises: groupRole.GroupRolePermission.CanDeleteExercises,
                     canLockExercisesPermanently: groupRole.GroupRolePermission.CanLockExercisesPermanently,
-                    canReleaseExercises: groupRole.GroupRolePermission.CanReleaseExercises,
+                    canReleaseExercises: groupRole.GroupRolePermission.CanManageExerciseReleases,
                     canRemoveMemberFromGroup: groupRole.GroupRolePermission.CanRemoveMemberFromGroup,
                     canSeeExercisesFromOthersInGroup: groupRole.GroupRolePermission.CanSeeExercisesFromOthersInGroup,
                     canSeeOtherMembers: groupRole.GroupRolePermission.CanSeeOtherMembers,
@@ -194,7 +194,7 @@ namespace ClientServer.Controllers.Core.Users
                     CanSeeExercisesFromOthersInGroup: role.CanSeeExercisesFromOthersInGroup,
                     CanRemoveMemberFromGroup: role.CanRemoveMemberFromGroup,
                     CanChangeExercises: role.CanChangeExercises,
-                    CanReleaseExercises: role.CanReleaseExercises,
+                    canManageExerciseReleases: role.CanReleaseExercises,
                     CanSeeOtherMembers: role.CanSeeExercisesFromOthersInGroup,
                     CanChangeGroupData: role.CanChangeGroupData
                 )
@@ -220,7 +220,7 @@ namespace ClientServer.Controllers.Core.Users
                 canChangeExercises: newRole.GroupRolePermission.CanChangeExercises,
                 canCreateExercises: newRole.GroupRolePermission.CanCreateExercises,
                 canRemoveMemberFromGroup: newRole.GroupRolePermission.CanRemoveMemberFromGroup,
-                canReleaseExercises: newRole.GroupRolePermission.CanReleaseExercises,
+                canReleaseExercises: newRole.GroupRolePermission.CanManageExerciseReleases,
                 canAddUserToGroup: newRole.GroupRolePermission.CanAddUserToGroup,
                 canDeleteExercises: newRole.GroupRolePermission.CanDeleteExercises,
                 canLockExercisesPermanently: newRole.GroupRolePermission.CanLockExercisesPermanently,
@@ -279,7 +279,7 @@ namespace ClientServer.Controllers.Core.Users
             oldRole.GroupRolePermission.CanSeeExercisesFromOthersInGroup = role.CanSeeExercisesFromOthersInGroup;
             oldRole.GroupRolePermission.CanRemoveMemberFromGroup = role.CanRemoveMemberFromGroup;
             oldRole.GroupRolePermission.CanChangeExercises = role.CanChangeExercises;
-            oldRole.GroupRolePermission.CanReleaseExercises = role.CanReleaseExercises;
+            oldRole.GroupRolePermission.CanManageExerciseReleases = role.CanReleaseExercises;
             oldRole.GroupRolePermission.CanSeeOtherMembers = role.CanSeeOtherMembers;
             oldRole.GroupRolePermission.CanChangeGroupData = role.CanChangeGroupData;
 
@@ -301,7 +301,7 @@ namespace ClientServer.Controllers.Core.Users
                 canChangeExercises: oldRole.GroupRolePermission.CanChangeExercises,
                 canCreateExercises: oldRole.GroupRolePermission.CanCreateExercises,
                 canRemoveMemberFromGroup: oldRole.GroupRolePermission.CanRemoveMemberFromGroup,
-                canReleaseExercises: oldRole.GroupRolePermission.CanReleaseExercises,
+                canReleaseExercises: oldRole.GroupRolePermission.CanManageExerciseReleases,
                 canAddUserToGroup: oldRole.GroupRolePermission.CanAddUserToGroup,
                 canDeleteExercises: oldRole.GroupRolePermission.CanDeleteExercises,
                 canLockExercisesPermanently: oldRole.GroupRolePermission.CanLockExercisesPermanently,
diff --git a/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs b/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs
index 611c5d3..cf9eac1 100644
--- a/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs
+++ b/src/ClientServer/Controllers/Core/Users/SystemRolesController.cs
@@ -18,7 +18,7 @@ namespace ClientServer.Controllers.Core.Users
     [Route(Constants.ApiPrefix + "systemroles")]
     public class SystemRolesController : ControllerWithDb
     {
-        public SystemRolesController(SyndromDbContext context) : base(context)
+        public SystemRolesController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Users/UserSettingsController.cs b/src/ClientServer/Controllers/Core/Users/UserSettingsController.cs
index ad0dc94..4f23c68 100644
--- a/src/ClientServer/Controllers/Core/Users/UserSettingsController.cs
+++ b/src/ClientServer/Controllers/Core/Users/UserSettingsController.cs
@@ -19,7 +19,7 @@ namespace ClientServer.Controllers.Core.Users
     [Route(Constants.ApiPrefix + "user/settings")]
     public class UserSettingsController : ControllerWithDb
     {
-        public UserSettingsController(SyndromDbContext context) : base(context)
+        public UserSettingsController(YapexDbContext context) : base(context)
         {
         }
 
diff --git a/src/ClientServer/Controllers/Core/Users/UsersController.cs b/src/ClientServer/Controllers/Core/Users/UsersController.cs
index 31c9de4..b768c52 100644
--- a/src/ClientServer/Controllers/Core/Users/UsersController.cs
+++ b/src/ClientServer/Controllers/Core/Users/UsersController.cs
@@ -20,7 +20,7 @@ namespace ClientServer.Controllers.Core.Users
         //frontend also hashes...
         public static string EmptyStringPw = PasswordHelper.HashLikeFrontend("");
             
-        public UsersController(SyndromDbContext context) : base(context)
+        public UsersController(YapexDbContext context) : base(context)
         {
         }
 
@@ -32,7 +32,7 @@ namespace ClientServer.Controllers.Core.Users
         /// <param name="userId">the user id</param>
         /// <param name="context">the db context</param>
         /// <returns></returns>
-        internal static async Task<UserDataFullBase> _GetUserData(int userId, SyndromDbContext context)
+        internal static async Task<UserDataFullBase> _GetUserData(int userId, YapexDbContext context)
         {
             User matchedUser = await context.Users
                 .Include(p => p.SystemRole)
diff --git a/src/ClientServer/Controllers/dashboard/DashboardController.cs b/src/ClientServer/Controllers/dashboard/DashboardController.cs
index 802151f..f2fac83 100644
--- a/src/ClientServer/Controllers/dashboard/DashboardController.cs
+++ b/src/ClientServer/Controllers/dashboard/DashboardController.cs
@@ -30,7 +30,7 @@ namespace ClientServer.Controllers
         /// </summary>
         public static int OnlineUserIdleInMin = 5;
 
-        public DashboardController(SyndromDbContext context) : base(context)
+        public DashboardController(YapexDbContext context) : base(context)
         {
         }
 
@@ -260,7 +260,7 @@ namespace ClientServer.Controllers
             var maxIdleTime = new TimeSpan(0, OnlineUserIdleInMin, 0);
 
             int maybeOnlineUsers = await _context.AuthTokens
-                    .CountAsync(p => (now - EF.Property<DateTime>(p, SyndromDbContext.LastUpdatedAt)) <= maxIdleTime)
+                    .CountAsync(p => (now - EF.Property<DateTime>(p, YapexDbContext.LastUpdatedAt)) <= maxIdleTime)
                 ;
 
             //now take all users that have done something in the last minute (maxIdleTime)..
diff --git a/src/ClientServer/Db/SyndromDBContext.cs b/src/ClientServer/Db/YapexDbContext.cs
similarity index 97%
rename from src/ClientServer/Db/SyndromDBContext.cs
rename to src/ClientServer/Db/YapexDbContext.cs
index 1472936..a72d157 100644
--- a/src/ClientServer/Db/SyndromDBContext.cs
+++ b/src/ClientServer/Db/YapexDbContext.cs
@@ -20,36 +20,7 @@ using Microsoft.EntityFrameworkCore.Metadata;
 
 namespace ClientServer.Db
 {
-    //table n:n naming syntax: Table1_With_Table2(_As_BetterName)
-    //e.g. ExerciseWithUserAsSolution
-
-    /* a n:n table needs to handle delete bahavior e.g. user 1 -> 1..* UserWithUserGroup 1..*<- 1 UserGroup
-     * the n:n table 
-     * in this case the config should be as this:
-     * 
-
-        m.Entity<UserGroup>()
-            .HasMany(p => p.UserWithUserGroups)
-            .WithOne(p => p.UserGroup)
-            .HasForeignKey(p => new { p.UserId, p.UserGroupId })
-            .IsRequired()
-            .OnDelete(DeleteBehavior.Cascade) //delete userWithUserGroup when the userGroup is deleted
-            ;
-
-        //extra config for n:n table
-        m.Entity<UserWithUserGroup>()
-            .HasOne(p => p.UserGroup)
-            .WithMany(p => p.UserWithUserGroups)
-            .HasForeignKey(p => p.UserGroupId)
-            .IsRequired()
-            .OnDelete(DeleteBehavior.Cascade) 
-            ;
-
-     * 
-     */
-
-
-    public class SyndromDbContext : DbContext
+    public class YapexDbContext : DbContext
     {
 
         /// <summary>
@@ -234,7 +205,7 @@ namespace ClientServer.Db
             typeof(AuthToken),
         };
 
-        public SyndromDbContext(DbContextOptions options) : base(options)
+        public YapexDbContext(DbContextOptions options) : base(options)
         {
         }
 
diff --git a/src/ClientServer/Migrations/20160824181544_init.Designer.cs b/src/ClientServer/Migrations/20160824181544_init.Designer.cs
index 3d57898..5d41f3e 100644
--- a/src/ClientServer/Migrations/20160824181544_init.Designer.cs
+++ b/src/ClientServer/Migrations/20160824181544_init.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160824181544_init")]
     partial class init
     {
diff --git a/src/ClientServer/Migrations/20160827045350_init2.Designer.cs b/src/ClientServer/Migrations/20160827045350_init2.Designer.cs
index f2f6a94..510860b 100644
--- a/src/ClientServer/Migrations/20160827045350_init2.Designer.cs
+++ b/src/ClientServer/Migrations/20160827045350_init2.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160827045350_init2")]
     partial class init2
     {
diff --git a/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs b/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs
index 79edffd..f736968 100644
--- a/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs
+++ b/src/ClientServer/Migrations/20160831154002_userSettingsTheme.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160831154002_userSettingsTheme")]
     partial class userSettingsTheme
     {
diff --git a/src/ClientServer/Migrations/20160903141707_init4.Designer.cs b/src/ClientServer/Migrations/20160903141707_init4.Designer.cs
index f194b09..c2eebf8 100644
--- a/src/ClientServer/Migrations/20160903141707_init4.Designer.cs
+++ b/src/ClientServer/Migrations/20160903141707_init4.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160903141707_init4")]
     partial class init4
     {
diff --git a/src/ClientServer/Migrations/20160906195429_init5.Designer.cs b/src/ClientServer/Migrations/20160906195429_init5.Designer.cs
index 3f5c752..780b520 100644
--- a/src/ClientServer/Migrations/20160906195429_init5.Designer.cs
+++ b/src/ClientServer/Migrations/20160906195429_init5.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160906195429_init5")]
     partial class init5
     {
diff --git a/src/ClientServer/Migrations/20160921124646_final1.Designer.cs b/src/ClientServer/Migrations/20160921124646_final1.Designer.cs
index 176c21f..77c1452 100644
--- a/src/ClientServer/Migrations/20160921124646_final1.Designer.cs
+++ b/src/ClientServer/Migrations/20160921124646_final1.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160921124646_final1")]
     partial class final1
     {
diff --git a/src/ClientServer/Migrations/20160921130105_final2.Designer.cs b/src/ClientServer/Migrations/20160921130105_final2.Designer.cs
index e7933f1..014db0d 100644
--- a/src/ClientServer/Migrations/20160921130105_final2.Designer.cs
+++ b/src/ClientServer/Migrations/20160921130105_final2.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160921130105_final2")]
     partial class final2
     {
diff --git a/src/ClientServer/Migrations/20160921155214_final3.Designer.cs b/src/ClientServer/Migrations/20160921155214_final3.Designer.cs
index fefad22..246c6db 100644
--- a/src/ClientServer/Migrations/20160921155214_final3.Designer.cs
+++ b/src/ClientServer/Migrations/20160921155214_final3.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160921155214_final3")]
     partial class final3
     {
diff --git a/src/ClientServer/Migrations/20160923095756_final4.Designer.cs b/src/ClientServer/Migrations/20160923095756_final4.Designer.cs
index 21059b6..ffa5752 100644
--- a/src/ClientServer/Migrations/20160923095756_final4.Designer.cs
+++ b/src/ClientServer/Migrations/20160923095756_final4.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20160923095756_final4")]
     partial class final4
     {
diff --git a/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs b/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs
index 1fbbb23..6f47853 100644
--- a/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs
+++ b/src/ClientServer/Migrations/20161001124636_tagPermission.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20161001124636_tagPermission")]
     partial class tagPermission
     {
diff --git a/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs b/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs
index 65fdb53..6bc4209 100644
--- a/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs
+++ b/src/ClientServer/Migrations/20161001140957_tagDisplayName2.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20161001140957_tagDisplayName2")]
     partial class tagDisplayName2
     {
diff --git a/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs b/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs
index 82daadf..9f6ba77 100644
--- a/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs
+++ b/src/ClientServer/Migrations/20161001142650_deleteTagCascade.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20161001142650_deleteTagCascade")]
     partial class deleteTagCascade
     {
diff --git a/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs b/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs
index bb5698f..c156237 100644
--- a/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs
+++ b/src/ClientServer/Migrations/20161220124855_ExerciseAddedNote.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20161220124855_ExerciseAddedNote")]
     partial class ExerciseAddedNote
     {
diff --git a/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs b/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs
index 2c0af9d..231bf29 100644
--- a/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs
+++ b/src/ClientServer/Migrations/20170112222129_authTokens.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20170112222129_authTokens")]
     partial class authTokens
     {
diff --git a/src/ClientServer/Migrations/20170307190625_lang.Designer.cs b/src/ClientServer/Migrations/20170307190625_lang.Designer.cs
index 12ad49d..5d11ad7 100644
--- a/src/ClientServer/Migrations/20170307190625_lang.Designer.cs
+++ b/src/ClientServer/Migrations/20170307190625_lang.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20170307190625_lang")]
     partial class lang
     {
diff --git a/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs b/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs
index 8291512..653a853 100755
--- a/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs
+++ b/src/ClientServer/Migrations/20171009190359_tagBackgroundColor.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171009190359_tagBackgroundColor")]
     partial class tagBackgroundColor
     {
diff --git a/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs b/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs
index 42b85b4..7be5ef6 100755
--- a/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs
+++ b/src/ClientServer/Migrations/20171009191709_tagDescription.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171009191709_tagDescription")]
     partial class tagDescription
     {
diff --git a/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs b/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs
index 6d7daed..5a2a679 100644
--- a/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs
+++ b/src/ClientServer/Migrations/20171012120923_tutorFreedback.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171012120923_tutorFreedback")]
     partial class tutorFreedback
     {
diff --git a/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs b/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs
index 980f11c..b735cab 100644
--- a/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs
+++ b/src/ClientServer/Migrations/20171015132006_enabledNullableAssessmentPoints.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171015132006_enabledNullableAssessmentPoints")]
     partial class enabledNullableAssessmentPoints
     {
diff --git a/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs b/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs
index 7dfd55f..c7da8f5 100755
--- a/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs
+++ b/src/ClientServer/Migrations/20171025160923_uniqueAuthToken.Designer.cs
@@ -7,7 +7,7 @@ using ClientServer.Db;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171025160923_uniqueAuthToken")]
     partial class uniqueAuthToken
     {
diff --git a/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs b/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs
index 803dddc..86ecc3c 100755
--- a/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs
+++ b/src/ClientServer/Migrations/20171106184650_participationShouldNotCount.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171106184650_participationShouldNotCount")]
     partial class participationShouldNotCount
     {
diff --git a/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs b/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs
index 2abe853..8d11c6d 100755
--- a/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs
+++ b/src/ClientServer/Migrations/20171109144627_customProjects.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171109144627_customProjects")]
     partial class customProjects
     {
diff --git a/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs b/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs
index d220225..2123e89 100755
--- a/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs
+++ b/src/ClientServer/Migrations/20171110153042_customProjectTestsWeights.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171110153042_customProjectTestsWeights")]
     partial class customProjectTestsWeights
     {
diff --git a/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs b/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs
index ce38be3..6a2a60b 100755
--- a/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs
+++ b/src/ClientServer/Migrations/20171229135558_dashboardSystemRolePermission.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20171229135558_dashboardSystemRolePermission")]
     partial class dashboardSystemRolePermission
     {
diff --git a/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs b/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs
index f57c437..4e5dcc8 100755
--- a/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs
+++ b/src/ClientServer/Migrations/20180214130057_ReleaseEExamOptions.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180214130057_ReleaseEExamOptions")]
     partial class ReleaseEExamOptions
     {
diff --git a/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs b/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs
index 162a77d..270ddcd 100755
--- a/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs
+++ b/src/ClientServer/Migrations/20180215112957_ReleaseHideSiteHeaderBar.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180215112957_ReleaseHideSiteHeaderBar")]
     partial class ReleaseHideSiteHeaderBar
     {
diff --git a/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs b/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs
index 873ef67..92d3d40 100755
--- a/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs
+++ b/src/ClientServer/Migrations/20180912160339_removeSolutionVersion1.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180912160339_removeSolutionVersion1")]
     partial class removeSolutionVersion1
     {
diff --git a/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs b/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs
index fecd086..bcd52be 100755
--- a/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs
+++ b/src/ClientServer/Migrations/20180912171554_removeSolutionVersion2.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180912171554_removeSolutionVersion2")]
     partial class removeSolutionVersion2
     {
diff --git a/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs b/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs
index 200d0c6..17ca2dd 100755
--- a/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs
+++ b/src/ClientServer/Migrations/20180912182512_removeSolutionVersion3.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180912182512_removeSolutionVersion3")]
     partial class removeSolutionVersion3
     {
diff --git a/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs b/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs
index 05313aa..2d1b9ce 100755
--- a/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs
+++ b/src/ClientServer/Migrations/20180913125543_removeSolutionVersion4.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180913125543_removeSolutionVersion4")]
     partial class removeSolutionVersion4
     {
diff --git a/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs b/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs
index 242274e..2c6f209 100755
--- a/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs
+++ b/src/ClientServer/Migrations/20180921120340_groupRolePermissionAndUpdatedAt.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180921120340_groupRolePermissionAndUpdatedAt")]
     partial class groupRolePermissionAndUpdatedAt
     {
diff --git a/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs b/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs
index 6e4d185..3fcbd67 100755
--- a/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs
+++ b/src/ClientServer/Migrations/20180929145343_addedAfterSolution.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20180929145343_addedAfterSolution")]
     partial class addedAfterSolution
     {
diff --git a/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs b/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs
index b3f779d..5ca63ed 100755
--- a/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs
+++ b/src/ClientServer/Migrations/20181001151109_maxCustomTests.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181001151109_maxCustomTests")]
     partial class maxCustomTests
     {
diff --git a/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs b/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs
index 65871a1..4328f7b 100755
--- a/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs
+++ b/src/ClientServer/Migrations/20181004180755_csrfToken.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181004180755_csrfToken")]
     partial class csrfToken
     {
diff --git a/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs b/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs
index 029f0e1..99411d8 100755
--- a/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs
+++ b/src/ClientServer/Migrations/20181008183904_UserSettingsAllowRemoveLang.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181008183904_UserSettingsAllowRemoveLang")]
     partial class UserSettingsAllowRemoveLang
     {
diff --git a/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs b/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs
index edf8ac4..0ab7523 100755
--- a/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs
+++ b/src/ClientServer/Migrations/20181011102314_removedSystemPermissionCanEditGroup.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181011102314_removedSystemPermissionCanEditGroup")]
     partial class removedSystemPermissionCanEditGroup
     {
diff --git a/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs b/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs
index 27a3e2d..3539a26 100755
--- a/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs
+++ b/src/ClientServer/Migrations/20181012124603_SetStringMaxLengths.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181012124603_SetStringMaxLengths")]
     partial class SetStringMaxLengths
     {
diff --git a/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs b/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs
index 664af07..a7bc0a9 100755
--- a/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs
+++ b/src/ClientServer/Migrations/20181026193143_ServerMessage.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181026193143_ServerMessage")]
     partial class ServerMessage
     {
diff --git a/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs b/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs
index e0c79b4..f8b7577 100755
--- a/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs
+++ b/src/ClientServer/Migrations/20181027121021_ParticipationLockSolutionsFlag.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181027121021_ParticipationLockSolutionsFlag")]
     partial class ParticipationLockSolutionsFlag
     {
diff --git a/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs b/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs
index 0ddbbcb..9b11858 100755
--- a/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs
+++ b/src/ClientServer/Migrations/20181027122426_ParticipationLockSolutionsFlag2.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181027122426_ParticipationLockSolutionsFlag2")]
     partial class ParticipationLockSolutionsFlag2
     {
diff --git a/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs b/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs
index 8ea0907..120d92d 100755
--- a/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs
+++ b/src/ClientServer/Migrations/20181123151602_StoreAssessmentErrors.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20181123151602_StoreAssessmentErrors")]
     partial class StoreAssessmentErrors
     {
diff --git a/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs b/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs
index 0c6e12c..02fce0a 100755
--- a/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs
+++ b/src/ClientServer/Migrations/20190202125311_MoreExamOptions.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190202125311_MoreExamOptions")]
     partial class MoreExamOptions
     {
diff --git a/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs b/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs
index 43b1218..0d7baf3 100755
--- a/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs
+++ b/src/ClientServer/Migrations/20190213174200_NewSystemSettings.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190213174200_NewSystemSettings")]
     partial class NewSystemSettings
     {
diff --git a/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs b/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs
index aff7480..b429996 100755
--- a/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs
+++ b/src/ClientServer/Migrations/20190214140941_PLangHighlighting.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190214140941_PLangHighlighting")]
     partial class PLangHighlighting
     {
diff --git a/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs b/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs
index e425bb0..16e2efe 100755
--- a/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs
+++ b/src/ClientServer/Migrations/20190214151239_PLangFileExtensions.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190214151239_PLangFileExtensions")]
     partial class PLangFileExtensions
     {
diff --git a/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs b/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs
index ac0b6ba..4b20cd7 100755
--- a/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs
+++ b/src/ClientServer/Migrations/20190214202737_RemovedUnusedPlangMarkdownMode.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190214202737_RemovedUnusedPlangMarkdownMode")]
     partial class RemovedUnusedPlangMarkdownMode
     {
diff --git a/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs b/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs
index 674a3ef..7b37ac9 100755
--- a/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs
+++ b/src/ClientServer/Migrations/20190320182329_TestAssetHashes.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190320182329_TestAssetHashes")]
     partial class TestAssetHashes
     {
diff --git a/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs b/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs
index b65aa59..b53f12d 100755
--- a/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs
+++ b/src/ClientServer/Migrations/20190329152856_LastEditingIpSolution.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190329152856_LastEditingIpSolution")]
     partial class LastEditingIpSolution
     {
diff --git a/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs b/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs
index 1eb4265..5f59360 100755
--- a/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs
+++ b/src/ClientServer/Migrations/20190409160808_SystemSettingsTestServerUiUrl.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190409160808_SystemSettingsTestServerUiUrl")]
     partial class SystemSettingsTestServerUiUrl
     {
diff --git a/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs b/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs
index 48f464d..fc2af72 100755
--- a/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs
+++ b/src/ClientServer/Migrations/20190410160446_SomeDeleteActionsChanged1.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190410160446_SomeDeleteActionsChanged1")]
     partial class SomeDeleteActionsChanged1
     {
diff --git a/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs b/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs
index c7f3375..3775fe8 100755
--- a/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs
+++ b/src/ClientServer/Migrations/20190419112922_JustRunTimeout.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190419112922_JustRunTimeout")]
     partial class JustRunTimeout
     {
diff --git a/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs b/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs
index c878311..1cf2da8 100755
--- a/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs
+++ b/src/ClientServer/Migrations/20190419153412_OtherJustRunTestLimits.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190419153412_OtherJustRunTestLimits")]
     partial class OtherJustRunTestLimits
     {
diff --git a/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs b/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs
index f5fda29..3da6ddb 100755
--- a/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs
+++ b/src/ClientServer/Migrations/20190420100505_CustomProjectTestLimits.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190420100505_CustomProjectTestLimits")]
     partial class CustomProjectTestLimits
     {
diff --git a/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs b/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs
index a420a1a..998a583 100755
--- a/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs
+++ b/src/ClientServer/Migrations/20190420164845_TestRunningTimes.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190420164845_TestRunningTimes")]
     partial class TestRunningTimes
     {
diff --git a/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs b/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs
index 715956d..a38ef7f 100755
--- a/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs
+++ b/src/ClientServer/Migrations/20190428191918_MoreTestLimitsAndCompilerTimeout.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190428191918_MoreTestLimitsAndCompilerTimeout")]
     partial class MoreTestLimitsAndCompilerTimeout
     {
diff --git a/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs b/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs
index 078db94..d45019e 100755
--- a/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs
+++ b/src/ClientServer/Migrations/20190430202149_MaxManualPoints.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190430202149_MaxManualPoints")]
     partial class MaxManualPoints
     {
diff --git a/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs b/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs
index e396536..71248de 100755
--- a/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs
+++ b/src/ClientServer/Migrations/20190501142551_HiddenTemplateFiles.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190501142551_HiddenTemplateFiles")]
     partial class HiddenTemplateFiles
     {
diff --git a/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs b/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs
index a3974f5..05379f4 100755
--- a/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs
+++ b/src/ClientServer/Migrations/20190501143221_RenameTemplateVisibility.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190501143221_RenameTemplateVisibility")]
     partial class RenameTemplateVisibility
     {
diff --git a/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs b/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs
index 551ac5d..29933ce 100755
--- a/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs
+++ b/src/ClientServer/Migrations/20190503160702_ReleasePLangRequiredNow.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190503160702_ReleasePLangRequiredNow")]
     partial class ReleasePLangRequiredNow
     {
diff --git a/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs b/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs
index c6d1dcd..934dbc3 100755
--- a/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs
+++ b/src/ClientServer/Migrations/20190505105057_ExerciseExamLock.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190505105057_ExerciseExamLock")]
     partial class ExerciseExamLock
     {
diff --git a/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs b/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs
index d98e406..33f06c2 100755
--- a/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs
+++ b/src/ClientServer/Migrations/20190505122337_ExerciseLockedGroupRolePermission.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190505122337_ExerciseLockedGroupRolePermission")]
     partial class ExerciseLockedGroupRolePermission
     {
diff --git a/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs b/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs
index c5163ac..84e51de 100755
--- a/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs
+++ b/src/ClientServer/Migrations/20190508134143_RemoveCopyPermission.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190508134143_RemoveCopyPermission")]
     partial class RemoveCopyPermission
     {
diff --git a/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs b/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs
index 031a987..44228ed 100755
--- a/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs
+++ b/src/ClientServer/Migrations/20190530135332_ExerciseMarkdownFiles.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190530135332_ExerciseMarkdownFiles")]
     partial class ExerciseMarkdownFiles
     {
diff --git a/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs b/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs
index 30f894f..4996cf0 100755
--- a/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs
+++ b/src/ClientServer/Migrations/20190601145551_ExerciseTestAssetFiles.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190601145551_ExerciseTestAssetFiles")]
     partial class ExerciseTestAssetFiles
     {
diff --git a/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs b/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs
index 611c6a7..33ce473 100755
--- a/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs
+++ b/src/ClientServer/Migrations/20190602180648_CustomUserFiles.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190602180648_CustomUserFiles")]
     partial class CustomUserFiles
     {
diff --git a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
index 4ce0722..61149c8 100755
--- a/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
+++ b/src/ClientServer/Migrations/20190606164356_RemoveAssetPathsAddedCompilerOptions.Designer.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     [Migration("20190606164356_RemoveAssetPathsAddedCompilerOptions")]
     partial class RemoveAssetPathsAddedCompilerOptions
     {
diff --git a/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs b/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
index d2e0591..989fc8c 100644
--- a/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
+++ b/src/ClientServer/Migrations/SyndromDbContextModelSnapshot.cs
@@ -8,7 +8,7 @@ using ClientServer.Models.Exercises.Release;
 
 namespace ClientServer.Migrations
 {
-    [DbContext(typeof(SyndromDbContext))]
+    [DbContext(typeof(YapexDbContext))]
     partial class SyndromDbContextModelSnapshot : ModelSnapshot
     {
         protected override void BuildModel(ModelBuilder modelBuilder)
@@ -1424,7 +1424,7 @@ namespace ClientServer.Migrations
 
                     b.Property<bool>("CanLockExercisesPermanently");
 
-                    b.Property<bool>("CanReleaseExercises");
+                    b.Property<bool>("CanManageExerciseReleases");
 
                     b.Property<bool>("CanRemoveMemberFromGroup");
 
diff --git a/src/ClientServer/Models/CustomProjects/CustomProject.cs b/src/ClientServer/Models/CustomProjects/CustomProject.cs
index bbe6ff1..58feb83 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProject.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProject.cs
@@ -32,7 +32,7 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/CustomProjects/CustomProjectDescription.cs b/src/ClientServer/Models/CustomProjects/CustomProjectDescription.cs
index e1a3a20..327634b 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProjectDescription.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProjectDescription.cs
@@ -21,7 +21,7 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the content
         /// </summary>
-        [MaxLength(SyndromDbContext.DescriptionContentMaxStringLength)]
+        [MaxLength(YapexDbContext.DescriptionContentMaxStringLength)]
         public string Content { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/CustomProjects/CustomProjectSolutionFile.cs b/src/ClientServer/Models/CustomProjects/CustomProjectSolutionFile.cs
index ef4574e..4d2b9eb 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProjectSolutionFile.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProjectSolutionFile.cs
@@ -11,13 +11,13 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the file name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FileNameWithExtension { get; set; }
         
         /// <summary>
         /// the content of the file
         /// </summary>
-        [MaxLength(SyndromDbContext.FileContentMaxStringLength)]
+        [MaxLength(YapexDbContext.FileContentMaxStringLength)]
         public string Content { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/CustomProjects/CustomProjectTest.cs b/src/ClientServer/Models/CustomProjects/CustomProjectTest.cs
index 8f6bdfb..4393cae 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProjectTest.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProjectTest.cs
@@ -21,12 +21,12 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// the content for the ... see the black-box-test protocol
         /// </summary>
-        [MaxLength(SyndromDbContext.TestContentMaxStringLength)]
+        [MaxLength(YapexDbContext.TestContentMaxStringLength)]
         public string Content { get; set; }
         
         /// <summary>
diff --git a/src/ClientServer/Models/CustomProjects/CustomProjectTestAsset.cs b/src/ClientServer/Models/CustomProjects/CustomProjectTestAsset.cs
index 958c261..fb07fc4 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProjectTestAsset.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProjectTestAsset.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the name of the file/asset
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// the content of the asset (binary)
@@ -22,14 +22,14 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
         
         /// <summary>
         /// the hash of the content
         /// can be null if not calculated but should not be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs b/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs
index 5f62cd0..9454b84 100644
--- a/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/CustomProjects/CustomProjectTestWithSolutionAsTestResult.cs
@@ -38,14 +38,14 @@ namespace ClientServer.Models.CustomProjects
         /// <summary>
         /// the conversation protocol between the user program and the test runner
         /// </summary>
-        [MaxLength(SyndromDbContext.TestProtocolMaxStringLength)]
+        [MaxLength(YapexDbContext.TestProtocolMaxStringLength)]
         public string Protocol { get; set; }
         
         /// <summary>
         /// the test runner version
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string RunnerVersion { get; set; }
 
         /// <summary>
@@ -76,7 +76,7 @@ namespace ClientServer.Models.CustomProjects
         /// the test server version
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/AfterSolutions/AfterSolutionFile.cs b/src/ClientServer/Models/Exercises/AfterSolutions/AfterSolutionFile.cs
index 9effd09..d41b093 100644
--- a/src/ClientServer/Models/Exercises/AfterSolutions/AfterSolutionFile.cs
+++ b/src/ClientServer/Models/Exercises/AfterSolutions/AfterSolutionFile.cs
@@ -11,12 +11,12 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// <summary>
         /// the file nname
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FileNameWithExtension { get; set; }
         /// <summary>
         /// the content of the file
         /// </summary>
-        [MaxLength(SyndromDbContext.FileContentMaxStringLength)]
+        [MaxLength(YapexDbContext.FileContentMaxStringLength)]
         public string Content { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs
index 0124779..099890c 100644
--- a/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/AfterSolutions/CustomTestWithAfterSolutionAsTestResult.cs
@@ -45,13 +45,13 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// <summary>
         /// the conversation protocol between the user program and the test runner
         /// </summary>
-        [MaxLength(SyndromDbContext.TestProtocolMaxStringLength)]
+        [MaxLength(YapexDbContext.TestProtocolMaxStringLength)]
         public string Protocol { get; set; }
         
         /// <summary>
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string RunnerVersion { get; set; }
 
         /// <summary>
@@ -82,7 +82,7 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// the test server version
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs
index 378eb5d..cbf5dfb 100644
--- a/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/AfterSolutions/TestWithAfterSolutionAsTestResult.cs
@@ -47,13 +47,13 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// <summary>
         /// the conversation protocol between the user program and the test runner
         /// </summary>
-        [MaxLength(SyndromDbContext.TestProtocolMaxStringLength)]
+        [MaxLength(YapexDbContext.TestProtocolMaxStringLength)]
         public string Protocol { get; set; }
         
         /// <summary>
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string RunnerVersion { get; set; }
 
         /// <summary>
@@ -84,7 +84,7 @@ namespace ClientServer.Models.Exercises.AfterSolutions
         /// the test server version
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Asset.cs b/src/ClientServer/Models/Exercises/Asset.cs
index 78c175c..03d1814 100644
--- a/src/ClientServer/Models/Exercises/Asset.cs
+++ b/src/ClientServer/Models/Exercises/Asset.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the name of the file/asset
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// the asset url for assets (starts with <see cref="Constants.MarkdownAssetFileUrlPrefix"/>)
@@ -21,7 +21,7 @@ namespace ClientServer.Models.Exercises
         /// we use html5 file api for that
         /// 
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string AssetUrl { get; set; }
         /// <summary>
         /// the content of the asset (binary)
@@ -30,7 +30,7 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Exercise.cs b/src/ClientServer/Models/Exercises/Exercise.cs
index 95c8534..36d5edb 100644
--- a/src/ClientServer/Models/Exercises/Exercise.cs
+++ b/src/ClientServer/Models/Exercises/Exercise.cs
@@ -26,12 +26,12 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// a short description
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string ShortDescription { get; set; }
 
         /// <summary>
@@ -64,7 +64,7 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// notes for the exercise (e.g. to change something in the future...)
         /// </summary>
-        [MaxLength(SyndromDbContext.NotesMaxStringLength)]
+        [MaxLength(YapexDbContext.NotesMaxStringLength)]
         public string Note { get; set; }
 
 
diff --git a/src/ClientServer/Models/Exercises/ExerciseDescription.cs b/src/ClientServer/Models/Exercises/ExerciseDescription.cs
index ca06238..c5d07bc 100644
--- a/src/ClientServer/Models/Exercises/ExerciseDescription.cs
+++ b/src/ClientServer/Models/Exercises/ExerciseDescription.cs
@@ -21,7 +21,7 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the content for the description (see the exercise description types and protocols)
         /// </summary>
-        [MaxLength(SyndromDbContext.DescriptionContentMaxStringLength)]
+        [MaxLength(YapexDbContext.DescriptionContentMaxStringLength)]
         public string Content { get; set; }
 
 
diff --git a/src/ClientServer/Models/Exercises/Release/ExerciseRelease.cs b/src/ClientServer/Models/Exercises/Release/ExerciseRelease.cs
index 5061d00..2846b74 100644
--- a/src/ClientServer/Models/Exercises/Release/ExerciseRelease.cs
+++ b/src/ClientServer/Models/Exercises/Release/ExerciseRelease.cs
@@ -39,7 +39,7 @@ namespace ClientServer.Models.Exercises.Release
         /// <summary>
         /// the generated code for this <see cref="ExerciseRelease"/>
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string GeneratedCode { get; set; }
 
         /// <summary>
@@ -57,7 +57,7 @@ namespace ClientServer.Models.Exercises.Release
         /// <summary>
         /// a note
         /// </summary>
-        [MaxLength(SyndromDbContext.NotesMaxStringLength)]
+        [MaxLength(YapexDbContext.NotesMaxStringLength)]
         public string Note { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs
index d1ad5a9..28be011 100644
--- a/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/Solution/CustomTestWithSingleSolutionAsTestResult.cs
@@ -55,13 +55,13 @@ namespace ClientServer.Models.Exercises.Solution
         /// <summary>
         /// the conversation protocol between the user program and the test runner
         /// </summary>
-        [MaxLength(SyndromDbContext.TestProtocolMaxStringLength)]
+        [MaxLength(YapexDbContext.TestProtocolMaxStringLength)]
         public string Protocol { get; set; }
         
         /// <summary>
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string RunnerVersion { get; set; }
 
         /// <summary>
@@ -92,7 +92,7 @@ namespace ClientServer.Models.Exercises.Solution
         /// the test server version
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
 
     }
diff --git a/src/ClientServer/Models/Exercises/Solution/Solution.cs b/src/ClientServer/Models/Exercises/Solution/Solution.cs
index 753c5cb..d24e8ed 100644
--- a/src/ClientServer/Models/Exercises/Solution/Solution.cs
+++ b/src/ClientServer/Models/Exercises/Solution/Solution.cs
@@ -94,7 +94,7 @@ namespace ClientServer.Models.Exercises.Solution
         /// from the user
         /// NOT USED YET
         /// </summary>
-        [MaxLength(SyndromDbContext.NotesMaxStringLength)]
+        [MaxLength(YapexDbContext.NotesMaxStringLength)]
         public string Note { get; set; }
 
         /// <summary>
@@ -124,7 +124,7 @@ namespace ClientServer.Models.Exercises.Solution
         /// the last ip address when a user created or changed the solution
         /// can be null if not captured (before we introduced this prop)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string LastEditingIpAddress { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Solution/SolutionAssessment.cs b/src/ClientServer/Models/Exercises/Solution/SolutionAssessment.cs
index f7ef268..6dfb963 100644
--- a/src/ClientServer/Models/Exercises/Solution/SolutionAssessment.cs
+++ b/src/ClientServer/Models/Exercises/Solution/SolutionAssessment.cs
@@ -45,19 +45,19 @@ namespace ClientServer.Models.Exercises.Solution
         /// null for no error or the empty string OR
         /// the error message from the test server or some other source
         /// </summary>
-        [MaxLength(SyndromDbContext.TestContentMaxStringLength)]
+        [MaxLength(YapexDbContext.TestContentMaxStringLength)]
         public string LastAssessmentErrorMessage { get; set; }
 
         /// <summary>
         /// the note from the tutor
         /// </summary>
-        [MaxLength(SyndromDbContext.NotesMaxStringLength)]
+        [MaxLength(YapexDbContext.NotesMaxStringLength)]
         public string NoteForOtherTutors { get; set; }
 
         /// <summary>
         /// the note for the student why he/she gets the manual points (feedback)
         /// </summary>
-        [MaxLength(SyndromDbContext.NotesMaxStringLength)]
+        [MaxLength(YapexDbContext.NotesMaxStringLength)]
         public string FeedbackForStudent { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Exercises/Solution/SolutionFile.cs b/src/ClientServer/Models/Exercises/Solution/SolutionFile.cs
index fdbb4c8..1307798 100644
--- a/src/ClientServer/Models/Exercises/Solution/SolutionFile.cs
+++ b/src/ClientServer/Models/Exercises/Solution/SolutionFile.cs
@@ -12,12 +12,12 @@ namespace ClientServer.Models.Exercises.Solution
         /// <summary>
         /// the file name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FileNameWithExtension { get; set; }
         /// <summary>
         /// the content of the file
         /// </summary>
-        [MaxLength(SyndromDbContext.FileContentMaxStringLength)]
+        [MaxLength(YapexDbContext.FileContentMaxStringLength)]
         public string Content { get; set; }
 
 
diff --git a/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs b/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs
index e366803..64b35e8 100644
--- a/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs
+++ b/src/ClientServer/Models/Exercises/Solution/TestWithSingleSolutionAsTestResult.cs
@@ -57,13 +57,13 @@ namespace ClientServer.Models.Exercises.Solution
         /// <summary>
         /// the conversation protocol between the user program and the test runner
         /// </summary>
-        [MaxLength(SyndromDbContext.TestProtocolMaxStringLength)]
+        [MaxLength(YapexDbContext.TestProtocolMaxStringLength)]
         public string Protocol { get; set; }
         
         /// <summary>
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string RunnerVersion { get; set; }
 
         /// <summary>
@@ -94,7 +94,7 @@ namespace ClientServer.Models.Exercises.Solution
         /// the test server version
         /// can be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerVersion { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Tag.cs b/src/ClientServer/Models/Exercises/Tag.cs
index ab3c285..510c8db 100644
--- a/src/ClientServer/Models/Exercises/Tag.cs
+++ b/src/ClientServer/Models/Exercises/Tag.cs
@@ -20,31 +20,31 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
 
         /// <summary>
         /// the some description text (for popup)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Description { get; set; }
         /// <summary>
         /// the html color (css string)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string HtmlColor { get; set; }
 
         /// <summary>
         /// the html background color (css string)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string HtmlBackgroundColor { get; set; }
 
         /// <summary>
         /// the html icon string
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string HtmlIcon { get; set; }
 
     }
diff --git a/src/ClientServer/Models/Exercises/TemplateFile.cs b/src/ClientServer/Models/Exercises/TemplateFile.cs
index a66a8e6..1a4d774 100644
--- a/src/ClientServer/Models/Exercises/TemplateFile.cs
+++ b/src/ClientServer/Models/Exercises/TemplateFile.cs
@@ -17,7 +17,7 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the name of the file with extension
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FileNameWithExtension { get; set; }
 
         /// <summary>
@@ -48,7 +48,7 @@ namespace ClientServer.Models.Exercises
         /// <summary>
         /// the content of the code template
         /// </summary>
-        [MaxLength(SyndromDbContext.FileContentMaxStringLength)]
+        [MaxLength(YapexDbContext.FileContentMaxStringLength)]
         public string Content { get; set; }
 
 
diff --git a/src/ClientServer/Models/Exercises/Tests/CustomTest.cs b/src/ClientServer/Models/Exercises/Tests/CustomTest.cs
index 3f0cdc1..5053b15 100644
--- a/src/ClientServer/Models/Exercises/Tests/CustomTest.cs
+++ b/src/ClientServer/Models/Exercises/Tests/CustomTest.cs
@@ -29,12 +29,12 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// the content for the <see cref="Test"/> ... see the black-box-test protocol
         /// </summary>
-        [MaxLength(SyndromDbContext.TestContentMaxStringLength)]
+        [MaxLength(YapexDbContext.TestContentMaxStringLength)]
         public string Content { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Exercises/Tests/CustomTestAsset.cs b/src/ClientServer/Models/Exercises/Tests/CustomTestAsset.cs
index 634234f..19e085e 100644
--- a/src/ClientServer/Models/Exercises/Tests/CustomTestAsset.cs
+++ b/src/ClientServer/Models/Exercises/Tests/CustomTestAsset.cs
@@ -17,7 +17,7 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the name of the file/asset
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// the content of the asset (binary)
@@ -26,14 +26,14 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
         
         /// <summary>
         /// the hash of the content
         /// can be null if not calculated but should not be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs b/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs
index 23f8fb8..237e502 100644
--- a/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs
+++ b/src/ClientServer/Models/Exercises/Tests/DefaultCustomTestSettings.cs
@@ -37,7 +37,7 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string CompilerOptions { get; set; }
 
 
diff --git a/src/ClientServer/Models/Exercises/Tests/Test.cs b/src/ClientServer/Models/Exercises/Tests/Test.cs
index de61987..8594cdb 100644
--- a/src/ClientServer/Models/Exercises/Tests/Test.cs
+++ b/src/ClientServer/Models/Exercises/Tests/Test.cs
@@ -24,7 +24,7 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the display name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// true: this <see cref="Test"/> is a submit test (is will run after the deadline is completed),
@@ -35,7 +35,7 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the content for the <see cref="Test"/> ... see the black-box-test protocol
         /// </summary>
-        [MaxLength(SyndromDbContext.TestContentMaxStringLength)]
+        [MaxLength(YapexDbContext.TestContentMaxStringLength)]
         public string Content { get; set; }
         /// <summary>
         /// the weight of the <see cref="Test"/>
diff --git a/src/ClientServer/Models/Exercises/Tests/TestAsset.cs b/src/ClientServer/Models/Exercises/Tests/TestAsset.cs
index 31a079a..bdf696a 100644
--- a/src/ClientServer/Models/Exercises/Tests/TestAsset.cs
+++ b/src/ClientServer/Models/Exercises/Tests/TestAsset.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the name of the file/asset
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
         /// <summary>
         /// the content of the asset (binary)
@@ -22,14 +22,14 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
         
         /// <summary>
         /// the hash of the content
         /// can be null if not calculated but should not be null
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Tests/TestSettings.cs b/src/ClientServer/Models/Exercises/Tests/TestSettings.cs
index 9c9c1c5..8972147 100644
--- a/src/ClientServer/Models/Exercises/Tests/TestSettings.cs
+++ b/src/ClientServer/Models/Exercises/Tests/TestSettings.cs
@@ -34,7 +34,7 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// some compiler options .g. -Xlint options needs to be separated by whitespaces (like normal command args)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string CompilerOptions { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Exercises/Tests/TestType.cs b/src/ClientServer/Models/Exercises/Tests/TestType.cs
index dbfa2b3..5728bd3 100644
--- a/src/ClientServer/Models/Exercises/Tests/TestType.cs
+++ b/src/ClientServer/Models/Exercises/Tests/TestType.cs
@@ -12,13 +12,13 @@ namespace ClientServer.Models.Exercises.Tests
         /// <summary>
         /// the type name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
         /// <summary>
         /// the internal name used on the test server
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string InternalName { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs b/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs
index 9b8bb08..575bd83 100644
--- a/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs
+++ b/src/ClientServer/Models/Files/FileReferenceMarkdownAsset.cs
@@ -24,19 +24,19 @@ namespace ClientServer.Models.Files
         /// <summary>
         /// md5 hash of the file content
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
 
         /// <summary>
         /// original name of the file (at the time the file was uploaded)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string OriginalName { get; set; }
         
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Files/FileReferenceTestAsset.cs b/src/ClientServer/Models/Files/FileReferenceTestAsset.cs
index 78133c3..f728ece 100644
--- a/src/ClientServer/Models/Files/FileReferenceTestAsset.cs
+++ b/src/ClientServer/Models/Files/FileReferenceTestAsset.cs
@@ -24,19 +24,19 @@ namespace ClientServer.Models.Files
         /// <summary>
         /// md5 hash of the file content
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
         
         /// <summary>
         /// original name of the file (at the time the file was uploaded)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string OriginalName { get; set; }
         
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
         
         /// <summary>
diff --git a/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs b/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs
index 7edfb1a..dc2754c 100644
--- a/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs
+++ b/src/ClientServer/Models/Files/FileReferenceUserFileAsset.cs
@@ -27,19 +27,19 @@ namespace ClientServer.Models.Files
         /// <summary>
         /// md5 hash of the file content
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Hash { get; set; }
         
         /// <summary>
         /// original name of the file (at the time the file was uploaded)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string OriginalName { get; set; }
         
         /// <summary>
         /// the mime type (maybe we need to know what content is stored)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string MimeType { get; set; }
         
         /// <summary>
diff --git a/src/ClientServer/Models/Lang.cs b/src/ClientServer/Models/Lang.cs
index 400e1fc..26f61a4 100644
--- a/src/ClientServer/Models/Lang.cs
+++ b/src/ClientServer/Models/Lang.cs
@@ -13,13 +13,13 @@ namespace ClientServer.Models
         /// <summary>
         /// the language name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Language { get; set; }
 
         /// <summary>
         /// e.g. en/de ...
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string LangShortcut { get; set; }
 
     }
diff --git a/src/ClientServer/Models/PLang.cs b/src/ClientServer/Models/PLang.cs
index 320295e..504dac8 100644
--- a/src/ClientServer/Models/PLang.cs
+++ b/src/ClientServer/Models/PLang.cs
@@ -13,27 +13,27 @@ namespace ClientServer.Models
         /// <summary>
         /// the name of the programming language
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
         /// <summary>
         /// the internal name e.g. used for the online-editor
         /// ALSO make sure it's a valid file path would be good to use no spaces... c++ -> cpp
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string InternalName { get; set; }
         
         
         /// <summary>
         /// a comma separated list of file extensions for this plang
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FileExtensionsWithDot { get; set; }
             
         /// <summary>
         /// the highlight mode for the editor (currently ace)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string EditorHighlightModeName { get; set; }
     }
 }
diff --git a/src/ClientServer/Models/Users/AuthToken.cs b/src/ClientServer/Models/Users/AuthToken.cs
index 7947fe7..36bd086 100644
--- a/src/ClientServer/Models/Users/AuthToken.cs
+++ b/src/ClientServer/Models/Users/AuthToken.cs
@@ -24,7 +24,7 @@ namespace ClientServer.Models.Users
         /// this is appended to the server secret to get a unique key for every user
         /// CURRENTLY NOT USED
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string RandomSecret { get; set; }
 
         /// <summary>
@@ -32,13 +32,13 @@ namespace ClientServer.Models.Users
         /// no more jwt token because if we rapidly change the tokens then the frontend and backend tokens get out of sync ...
         /// also if we extend the token lifetime we don't change the content (jwt token would change because other expiration date ...)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string UserAuthToken { get; set; }
 
         /// <summary>
         /// the crsf token which is needed for any request (after login)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string CsrfToken { get; set; }
 
 
diff --git a/src/ClientServer/Models/Users/ExternalUser.cs b/src/ClientServer/Models/Users/ExternalUser.cs
index 2b75c5a..452bcc9 100644
--- a/src/ClientServer/Models/Users/ExternalUser.cs
+++ b/src/ClientServer/Models/Users/ExternalUser.cs
@@ -16,24 +16,24 @@ namespace ClientServer.Models.Users
         /// <summary>
         /// the token e.g. ahbxf or the username
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Token { get; set; }
         /// <summary>
         /// the first name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FirstName { get; set; }
 
         /// <summary>
         /// the last name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string LastName { get; set; }
 
         /// <summary>
         /// the email
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Email { get; set; }
         /// <summary>
         /// true: the external data changed so when the next redirect comes then refresh the connected user data,
diff --git a/src/ClientServer/Models/Users/GroupRole.cs b/src/ClientServer/Models/Users/GroupRole.cs
index 889559d..2517350 100644
--- a/src/ClientServer/Models/Users/GroupRole.cs
+++ b/src/ClientServer/Models/Users/GroupRole.cs
@@ -20,7 +20,7 @@ namespace ClientServer.Models.Users
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
 
diff --git a/src/ClientServer/Models/Users/GroupRolePermission.cs b/src/ClientServer/Models/Users/GroupRolePermission.cs
index a277a44..88b9c43 100644
--- a/src/ClientServer/Models/Users/GroupRolePermission.cs
+++ b/src/ClientServer/Models/Users/GroupRolePermission.cs
@@ -14,7 +14,7 @@ namespace ClientServer.Models.Users
         }
 
         public GroupRolePermission(bool CanCreateExercises, bool CanChangeExercises, bool CanDeleteExercises,
-            bool CanSeeExercisesFromOthersInGroup, bool CanReleaseExercises,
+            bool CanSeeExercisesFromOthersInGroup, bool canManageExerciseReleases,
             bool CanLockExercisesPermanently,
             bool CanAssessExercises, bool CanAddUserToGroup, bool CanRemoveMemberFromGroup,
             bool CanChangeOtherMembersRole, bool CanSeeOtherMembers, bool CanChangeGroupData)
@@ -23,7 +23,7 @@ namespace ClientServer.Models.Users
             this.CanChangeExercises = CanChangeExercises;
             this.CanDeleteExercises = CanDeleteExercises;
             this.CanSeeExercisesFromOthersInGroup = CanSeeExercisesFromOthersInGroup;
-            this.CanReleaseExercises = CanReleaseExercises;
+            this.CanManageExerciseReleases = canManageExerciseReleases;
             this.CanLockExercisesPermanently = CanLockExercisesPermanently;
             this.CanAssessExercises = CanAssessExercises;
             this.CanAddUserToGroup = CanAddUserToGroup;
@@ -59,9 +59,9 @@ namespace ClientServer.Models.Users
         public bool CanSeeExercisesFromOthersInGroup { get; set; }
 
         /// <summary>
-        /// true: can release exercises, false: not
+        /// true: can manage exercise releases (crud), false: not
         /// </summary>
-        public bool CanReleaseExercises { get; set; }
+        public bool CanManageExerciseReleases { get; set; }
 
         /// <summary>
         /// true: can lock exercises, false not
diff --git a/src/ClientServer/Models/Users/Settings/CodeEditorSettings.cs b/src/ClientServer/Models/Users/Settings/CodeEditorSettings.cs
index 709d7bb..3238a93 100644
--- a/src/ClientServer/Models/Users/Settings/CodeEditorSettings.cs
+++ b/src/ClientServer/Models/Users/Settings/CodeEditorSettings.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Models.Users.Settings
         /// <summary>
         /// the theme of the editor
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Theme { get; set; }
         /// <summary>
         /// the font size 
diff --git a/src/ClientServer/Models/Users/Settings/UserSetting.cs b/src/ClientServer/Models/Users/Settings/UserSetting.cs
index 632abbd..36d49d1 100644
--- a/src/ClientServer/Models/Users/Settings/UserSetting.cs
+++ b/src/ClientServer/Models/Users/Settings/UserSetting.cs
@@ -21,7 +21,7 @@ namespace ClientServer.Models.Users.Settings
         /// <summary>
         /// the theme to use (can be null)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Theme { get; set; }
 
 
diff --git a/src/ClientServer/Models/Users/SystemRole.cs b/src/ClientServer/Models/Users/SystemRole.cs
index 333b335..08125b6 100644
--- a/src/ClientServer/Models/Users/SystemRole.cs
+++ b/src/ClientServer/Models/Users/SystemRole.cs
@@ -16,13 +16,13 @@ namespace ClientServer.Models.Users
         /// <summary>
         /// the name of the role
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
         /// <summary>
         /// the email of the role (may be null)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Email { get; set; }
 
 
diff --git a/src/ClientServer/Models/Users/SystemSetting.cs b/src/ClientServer/Models/Users/SystemSetting.cs
index 058721b..1998d68 100644
--- a/src/ClientServer/Models/Users/SystemSetting.cs
+++ b/src/ClientServer/Models/Users/SystemSetting.cs
@@ -60,7 +60,7 @@ namespace ClientServer.Models.Users
         /// <summary>
         /// a message that is displayed to all users (refreshed ever X seconds, X set in frontend)
         /// </summary>
-        [MaxLength(SyndromDbContext.NotesMaxStringLength)]
+        [MaxLength(YapexDbContext.NotesMaxStringLength)]
         public string CurrentServerMessage { get; set; }
         
         
@@ -75,27 +75,27 @@ namespace ClientServer.Models.Users
         ///
         /// NOT NOW we only use on test server but we might to add a SubmitTestServerStatsUrl at some point...
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerStatsUrl { get; set; }
        
         
         /// <summary>
         /// the test server url, used to run tests
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerUrl { get; set; }
 
         
         /// <summary>
         /// the submit test server url, used to run submit tests
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string SubmitTestServerUrl { get; set; }
 
         /// <summary>
         /// the url to the ui to configure the test server
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string TestServerConfigUiUrl { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Users/User.cs b/src/ClientServer/Models/Users/User.cs
index 5856ffb..d42b7b0 100644
--- a/src/ClientServer/Models/Users/User.cs
+++ b/src/ClientServer/Models/Users/User.cs
@@ -28,32 +28,32 @@ namespace ClientServer.Models.Users
         /// <summary>
         /// the letter code (e.g. ahbxf)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Token { get; set; }
 
         /// <summary>
         /// the password 
         /// CAN BE NULL if we wait for the user to enter a password after he was redirected for the first time from ostepu (external login)
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Password { get; set; }
 
         /// <summary>
         /// the first name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string FirstName { get; set; }
 
         /// <summary>
         /// the last name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string LastName { get; set; }
 
         /// <summary>
         /// the email
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Email { get; set; }
 
         /// <summary>
diff --git a/src/ClientServer/Models/Users/UserGroup.cs b/src/ClientServer/Models/Users/UserGroup.cs
index 186df88..0760ec2 100644
--- a/src/ClientServer/Models/Users/UserGroup.cs
+++ b/src/ClientServer/Models/Users/UserGroup.cs
@@ -21,13 +21,13 @@ namespace ClientServer.Models.Users
         /// <summary>
         /// the name
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string DisplayName { get; set; }
 
         /// <summary>
         /// the email
         /// </summary>
-        [MaxLength(SyndromDbContext.DefaultMaxStringLength)]
+        [MaxLength(YapexDbContext.DefaultMaxStringLength)]
         public string Email { get; set; }
 
 
diff --git a/src/ClientServer/Startup.cs b/src/ClientServer/Startup.cs
index 03bae7d..8c81cbe 100644
--- a/src/ClientServer/Startup.cs
+++ b/src/ClientServer/Startup.cs
@@ -77,11 +77,11 @@ namespace ClientServer
         {
             #region ensure that the database is up to date...
 
-            var optionsBuilder = new DbContextOptionsBuilder<SyndromDbContext>();
+            var optionsBuilder = new DbContextOptionsBuilder<YapexDbContext>();
             optionsBuilder.UseNpgsql(AppConfiguration.DbConnectionString);
             try
             {
-                using (var context = new SyndromDbContext(optionsBuilder.Options))
+                using (var context = new YapexDbContext(optionsBuilder.Options))
                 {
                     context.Database.Migrate();
                 }
@@ -117,7 +117,7 @@ namespace ClientServer
             });
 
             services
-                .AddDbContext<SyndromDbContext>(option => option.UseNpgsql(AppConfiguration.DbConnectionString),
+                .AddDbContext<YapexDbContext>(option => option.UseNpgsql(AppConfiguration.DbConnectionString),
                     ServiceLifetime.Scoped);
 
             //services.AddDbContext<SyndromDbContext>(options =>
diff --git a/src/ClientServer/Workers/FileWorker.cs b/src/ClientServer/Workers/FileWorker.cs
new file mode 100644
index 0000000..161cede
--- /dev/null
+++ b/src/ClientServer/Workers/FileWorker.cs
@@ -0,0 +1,195 @@
+using System;
+using System.IO;
+using System.Linq;
+using System.Reactive.Linq;
+using System.Threading;
+using ClientServer.Db;
+using ClientServer.Helpers;
+using Microsoft.EntityFrameworkCore;
+
+namespace ClientServer.Workers
+{
+    /// <summary>
+    /// a worker to delete old/unused uploaded files
+    ///
+    /// we could do this immediately when we delete e.g. a custom test (then delete connected files if this was the only connection)
+    ///   but when we cascade delete the custom test (e.g. because the release as deleted) then this won't work
+    ///   we could delete the files when we call the delete api for the parent entity e.g. when the release is deleted
+    ///   then delete all files for all connected custom tests
+    ///
+    /// it's easier to just run a worker every X minutes to clear all unused files
+    /// a file is unused if it is in db but not used by any entity
+    /// </summary>
+    public static class FileWorker
+    {
+        public static void Start()
+        {
+            //see http://introtorx.com/Content/v1.0.10621.0/15_SchedulingAndThreading.html
+            //and https://stackoverflow.com/questions/20451939/observeon-and-subscribeon-where-the-work-is-being-done
+//            Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
+            //this will block the current thread (we call this from main program but this is ok because
+            //we want this to finish before we start the server fully)
+            Observable
+                .Interval(TimeSpan.FromMinutes(AppConfiguration.DeleteFilesWorkerIntervalInMinutes))
+//                .Interval(TimeSpan.FromSeconds(20)) //for debug
+                .Subscribe((min) => { NextRun(); });
+        }
+        
+        public static void NextRun()
+        {
+//            Console.WriteLine($"file: {Thread.CurrentThread.ManagedThreadId}");
+            
+            var optionsBuilder = new DbContextOptionsBuilder<YapexDbContext>();
+            optionsBuilder.UseNpgsql(AppConfiguration.DbConnectionString);
+
+            try
+            {
+                using (var context = new YapexDbContext(optionsBuilder.Options))
+                {
+                    #region (exercise) markdown assets
+
+                    var unusedMarkdownAssets = context.FileReferenceMarkdownAssets
+                            .Where(p => p.AssetReferences.Count == 0)
+                            .ToList()
+                        ;
+
+                    //we could do this without a transaction because we only use one .SaveChanges but
+                    //maybe in future we want to save after every single delete?
+                    using (var transaction = context.Database.BeginTransaction())
+                    {
+                        try
+                        {
+                            foreach (var unusedMarkdownAsset in unusedMarkdownAssets)
+                            {
+                                var basePath = Files.GetUploadFilePath(UploadDirType.MarkdownAssets);
+
+                                var info = new FileInfo(Path.Combine(basePath, unusedMarkdownAsset.Id.ToString()));
+
+                                if (info.Exists)
+                                {
+                                    info.Delete();
+                                    Console.WriteLine(
+                                        $"[INFO] Deleting unused markdown file with id {unusedMarkdownAsset.Id}");
+                                }
+
+                                Console.WriteLine(
+                                    $"[INFO] Deleting unused markdown file reference with id {unusedMarkdownAsset.Id}");
+                                context.FileReferenceMarkdownAssets.Remove(unusedMarkdownAsset);
+                            }
+
+                            if (unusedMarkdownAssets.Count > 0)
+                            {
+                                context.SaveChanges();
+                                transaction.Commit();
+                            }
+                        }
+                        catch (Exception e)
+                        {
+                            transaction.Rollback();
+                            Console.WriteLine(e);
+                            throw;
+                        }
+                    }
+
+                    #endregion
+
+
+                    #region test assets
+
+                    var unusedTestAssets = context.FileReferenceTestAssets
+                            .Where(p => p.AssetReferences.Count == 0)
+                            .ToList()
+                        ;
+
+                    using (var transaction = context.Database.BeginTransaction())
+                    {
+                        try
+                        {
+                            foreach (var unusedTestAsset in unusedTestAssets)
+                            {
+                                var basePath = Files.GetUploadFilePath(UploadDirType.TestAssets);
+
+                                var info = new FileInfo(Path.Combine(basePath, unusedTestAsset.Id.ToString()));
+
+                                if (info.Exists)
+                                {
+                                    info.Delete();
+                                    Console.WriteLine($"[INFO] Deleting unused test file with id {unusedTestAsset.Id}");
+                                }
+
+                                Console.WriteLine(
+                                    $"[INFO] Deleting unused test file reference with id {unusedTestAsset.Id}");
+                                context.FileReferenceTestAssets.Remove(unusedTestAsset);
+                            }
+
+                            if (unusedTestAssets.Count > 0)
+                            {
+                                context.SaveChanges();
+                                transaction.Commit();
+                            }
+                        }
+                        catch (Exception e)
+                        {
+                            transaction.Rollback();
+                            Console.WriteLine(e);
+                            throw;
+                        }
+                    }
+
+                    #endregion
+
+                    #region user assets
+
+                    var unusedUserFileAssets = context.FileReferenceUserFileAssets
+                            .Where(p => p.CustomTestWithFileAsAssetReferences.Count == 0 &&
+                                        p.CustomProjectDescriptionWithFileAsAssetReferences.Count == 0 &&
+                                        p.CustomProjectTestWithFileAsAssetReferences.Count == 0)
+                            .ToList()
+                        ;
+
+                    using (var transaction = context.Database.BeginTransaction())
+                    {
+                        try
+                        {
+                            foreach (var unusedUserFileAsset in unusedUserFileAssets)
+                            {
+                                var basePath = Files.GetUploadFilePath(UploadDirType.UserAssets);
+
+                                var info = new FileInfo(Path.Combine(basePath, unusedUserFileAsset.Id.ToString()));
+
+                                if (info.Exists)
+                                {
+                                    info.Delete();
+                                    Console.WriteLine(
+                                        $"[INFO] Deleting unused user file (in file system) with id {unusedUserFileAsset.Id}");
+                                }
+
+                                Console.WriteLine(
+                                    $"[INFO] Deleting unused user file reference (in db) with id {unusedUserFileAsset.Id}");
+                                context.FileReferenceUserFileAssets.Remove(unusedUserFileAsset);
+                            }
+
+                            if (unusedUserFileAssets.Count > 0)
+                            {
+                                context.SaveChanges();
+                                transaction.Commit();
+                            }
+                        }
+                        catch (Exception e)
+                        {
+                            transaction.Rollback();
+                            Console.WriteLine(e);
+                            throw;
+                        }
+                    }
+
+                    #endregion
+                }
+            }
+            catch (Exception exception)
+            {
+                Console.WriteLine(exception);
+            }
+        }
+    }
+}
diff --git a/src/ClientServer/Workers/ReleaseWorker.cs b/src/ClientServer/Workers/ReleaseWorker.cs
index c73d4e7..c2e517c 100644
--- a/src/ClientServer/Workers/ReleaseWorker.cs
+++ b/src/ClientServer/Workers/ReleaseWorker.cs
@@ -52,12 +52,12 @@ namespace ClientServer.Workers
                 //Console.WriteLine("Release scheduler run # " + runNumber + " running at: " + now + " (UTC)");
             }
 
-            var optionsBuilder = new DbContextOptionsBuilder<SyndromDbContext>();
+            var optionsBuilder = new DbContextOptionsBuilder<YapexDbContext>();
             optionsBuilder.UseNpgsql(AppConfiguration.DbConnectionString);
 
             try
             {
-                using (var context = new SyndromDbContext(optionsBuilder.Options))
+                using (var context = new YapexDbContext(optionsBuilder.Options))
                 {
                     var automaticReleasesToRelease = context.ExerciseReleases
                         .Where(
diff --git a/src/ClientServer/Workers/SubmissionAssessmentWorker.cs b/src/ClientServer/Workers/SubmissionAssessmentWorker.cs
index bb78ed9..455b9ca 100644
--- a/src/ClientServer/Workers/SubmissionAssessmentWorker.cs
+++ b/src/ClientServer/Workers/SubmissionAssessmentWorker.cs
@@ -83,12 +83,12 @@ namespace ClientServer.Schedulers
         [Obsolete("not properly implemented & unsafe")]
         public static void RunForRelease(int releaseId)
         {
-            var optionsBuilder = new DbContextOptionsBuilder<SyndromDbContext>();
+            var optionsBuilder = new DbContextOptionsBuilder<YapexDbContext>();
             optionsBuilder.UseNpgsql(AppConfiguration.DbConnectionString);
 
             try
             {
-                using (var context = new SyndromDbContext(optionsBuilder.Options))
+                using (var context = new YapexDbContext(optionsBuilder.Options))
                 {
                     var systemSettings = context.SystemSettings.FirstOrDefault();
 
@@ -177,7 +177,7 @@ namespace ClientServer.Schedulers
                     //Console.WriteLine("Assessment scheduler run # " + runNumber + " running at: " + now.ToLocalTime());
                 }
 
-                var optionsBuilder = new DbContextOptionsBuilder<SyndromDbContext>();
+                var optionsBuilder = new DbContextOptionsBuilder<YapexDbContext>();
                 optionsBuilder.UseNpgsql(AppConfiguration.DbConnectionString);
 
                 int assessedReleases = 0;
@@ -185,7 +185,7 @@ namespace ClientServer.Schedulers
 
                 try
                 {
-                    using (var context = new SyndromDbContext(optionsBuilder.Options))
+                    using (var context = new YapexDbContext(optionsBuilder.Options))
                     {
                         var systemSettings = context.SystemSettings.FirstOrDefault();
 
@@ -273,7 +273,7 @@ namespace ClientServer.Schedulers
         /// <param name="context"></param>
         /// <param name="testingController"></param>
         /// <returns></returns>
-        internal static bool AddDummyAssessments(ExerciseRelease release, SyndromDbContext context,
+        internal static bool AddDummyAssessments(ExerciseRelease release, YapexDbContext context,
             TestingController testingController)
         {
             ExerciseRelease finishedRelease = context.ExerciseReleases
@@ -475,7 +475,7 @@ namespace ClientServer.Schedulers
         /// <param name="testingController">the testing controller to run the tests</param>
         /// <param name="resetTestResultsFirst">true: reset all test results before running the assessment, false: not</param>
         /// <returns>true: ok, false: no matching release found</returns>
-        internal static async Task<bool> RunForRelease(ExerciseRelease release, SyndromDbContext context,
+        internal static async Task<bool> RunForRelease(ExerciseRelease release, YapexDbContext context,
             TestingController testingController, bool reRunNotFinishedAssessments, bool resetTestResultsFirst,
             SystemSetting systemSettings)
         {
@@ -715,7 +715,7 @@ namespace ClientServer.Schedulers
         /// <param name="testingController">the testing controller</param>
         /// <returns></returns>
         internal static async Task<bool> RunSingleAutomaticAssessment(ExerciseRelease release, SolutionPrimaryKey pk,
-            SyndromDbContext context, TestingController testingController, SystemSetting systemSettings)
+            YapexDbContext context, TestingController testingController, SystemSetting systemSettings)
         {
             ExerciseRelease finishedRelease = await context.ExerciseReleases
                     .Include(p => p.ExerciseReleaseWithUserAsParticipations)
@@ -844,7 +844,7 @@ namespace ClientServer.Schedulers
         /// <returns>true: everything ok, false: some error</returns>
         private static async Task<bool> RunAutomaticAssessment(SolutionPrimaryKey pk, int maxNormalTestPoints,
             int maxSubmitTestPoints,
-            List<Test> normalTests, List<Test> submitTests, SyndromDbContext context,
+            List<Test> normalTests, List<Test> submitTests, YapexDbContext context,
             CodeTemplate codeTemplate,
             TestingController testingController,
             SystemSetting systemSettings,
-- 
GitLab