diff --git a/src/ClientServer/Config/Constants.cs b/src/ClientServer/Config/Constants.cs
index 79be811721aa8b95f22067615175aed2061af56f..f253644a4f99aab66f998d41b1ac40f9196c05f6 100644
--- a/src/ClientServer/Config/Constants.cs
+++ b/src/ClientServer/Config/Constants.cs
@@ -13,7 +13,7 @@ namespace ClientServer.Helpers
     /// </summary>
     public static class Constants
     {
-        public static string VersionString = "2.5.8";
+        public static string VersionString = "2.5.9";
 
         /// <summary>
         /// this is only set once at program.cs!!
diff --git a/src/ClientServer/Controllers/ControllerWithDb.cs b/src/ClientServer/Controllers/ControllerWithDb.cs
index 2b655e91a64f22cc90fc5abbdefe699276976787..5e6b0d01b6df23e1fe039f15d927dc90bd548fe8 100644
--- a/src/ClientServer/Controllers/ControllerWithDb.cs
+++ b/src/ClientServer/Controllers/ControllerWithDb.cs
@@ -31,18 +31,13 @@ namespace ClientServer.Controllers
         /// <param name="ex">the error</param>
         public Task HandleDbError(Exception ex)
         {
-            var message = "server db error: " + ex.Message;
-            if (ex.InnerException != null)
-            {
-                message += " | inner exception: " + ex.InnerException.Message;
-            }
-
-            Console.WriteLine("[DB ERROR]: " + message);
+            //Exception.toString() is more verbose than just the exception + inner...
+            Console.WriteLine("[DB ERROR]: " + ex);
             
             if (AppConfiguration.IsDebugMode)
             {
                 return
-                    Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.ServerError, message)));
+                    Response.WriteAsync(Jc.Serialize(new BasicResponse(ResponseCode.ServerError, ex.ToString())));
             }
 
             return
diff --git a/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs b/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
index 18713a123e6a17a63baf1e74fcaff8a3d1ac21b5..b44890bf7628d207df39c56107e31ab4fbbf1e77 100644
--- a/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/ExerciseEditorController.cs
@@ -1683,8 +1683,18 @@ namespace ClientServer.Controllers.Core.Exercises
                     {
                         _context.Exercises.Add(exCopy);
 
+                        //TODO does this help??
+                        foreach (var test in newTests)
+                        {
+                            test.TestSettings.Id = test.Id;
+                        }
+
                         jsonTests = JsonConvert.SerializeObject(exCopy.Tests, Formatting.Indented,
-                            new JsonSerializerSettings() {ReferenceLoopHandling = ReferenceLoopHandling.Serialize});
+                            new JsonSerializerSettings()
+                            {
+                                ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
+                                PreserveReferencesHandling = PreserveReferencesHandling.All
+                            });
                         
                         await _context.SaveChangesAsync();
 
@@ -1700,11 +1710,9 @@ namespace ClientServer.Controllers.Core.Exercises
                     }
                     catch (Exception ex)
                     {
-                        Console.WriteLine(ex.Message);
-                        if (ex.InnerException != null)
-                        {
-                            Console.WriteLine(ex.InnerException);
-                        }
+                        Console.WriteLine(ex);
+
+                        Console.WriteLine("DBG: " + jsonTests);
 
 //                        transaction.Rollback();
 
@@ -1719,7 +1727,7 @@ namespace ClientServer.Controllers.Core.Exercises
                 
                 //we get the error here: ERROR:  insert or update on table "TestCaseSettingses" violates foreign key constraint "FK_TestCaseSettingses_Tests_TestId
                 //DETAIL:  Key (TestId)=(0) is not present in table "Tests".
-                Console.WriteLine("DBG: " + jsonTests);
+//                Console.WriteLine("DBG: " + jsonTests);
                 
                 //see https://www.npgsql.org/doc/transactions.html
                 await base.HandleDbError(e);
diff --git a/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs b/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
index 0b1dccbc61490af52d4699c77ebe088043846205..267e5f2a8d54a3ea8770e3718412ccc011f2edaf 100644
--- a/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/SubmissionController.cs
@@ -1036,10 +1036,23 @@ namespace ClientServer.Controllers.Core.Exercises
             }
             catch (System.Exception ex)
             {
-                await
-                    Response.WriteAsync(
-                        Jc.Serialize(new BasicResponse(ResponseCode.InvalidRequest,
-                            "could not process line " + lineCount + ", error: " + ex.Message)));
+
+                if (AppConfiguration.IsDebugMode)
+                {
+                    await
+                        Response.WriteAsync(
+                            Jc.Serialize(new BasicResponse(ResponseCode.InvalidRequest,
+                                "could not process line " + lineCount + ", error: " + ex)));
+                }
+                else
+                {
+                    await
+                        Response.WriteAsync(
+                            Jc.Serialize(new BasicResponse(ResponseCode.InvalidRequest,
+                                "could not process line " + lineCount + ", error: " + ex.Message)));
+                }
+                
+                
                 return;
             }
 
@@ -1245,11 +1258,12 @@ namespace ClientServer.Controllers.Core.Exercises
                     if (AppConfiguration.IsDebugMode)
                     {
                         Response.StatusCode = 406;
+                        Console.WriteLine("[ERROR] zipping file, exception: " + ex);
                         await
                             Response.WriteAsync(
                                 Jc.Serialize(new BasicResponse(ResponseCode.ServerError,
-                                    "error when zipping file: " + solutionFile.FileNameWithExtension + ", message: " +
-                                    ex.Message)));
+                                    "error when zipping file: " + solutionFile.FileNameWithExtension + ", exception: " +
+                                    ex)));
                     }
                     else
                     {
@@ -1501,13 +1515,15 @@ namespace ClientServer.Controllers.Core.Exercises
                     {
                         if (AppConfiguration.IsDebugMode)
                         {
+                            Console.WriteLine("[ERROR] zipping file, exception: " + ex);
+                            
                             Response.StatusCode = 406;
                             await
                                 Response.WriteAsync(
                                     Jc.Serialize(new BasicResponse(ResponseCode.ServerError,
                                         "error when zipping file: " + solutionFile.FileNameWithExtension +
-                                        ", message: " +
-                                        ex.Message)));
+                                        ", exception: " +
+                                        ex)));
                         }
                         else
                         {
@@ -1564,15 +1580,19 @@ namespace ClientServer.Controllers.Core.Exercises
                     {
                         if (AppConfiguration.IsDebugMode)
                         {
+
+                            Console.WriteLine("[ERROR] zipping file, exception: " + ex);
+                            Response.StatusCode = 406;
                             await
                                 Response.WriteAsync(
                                     Jc.Serialize(new BasicResponse(ResponseCode.ServerError,
                                         "error when zipping file: " + templateFile.FileNameWithExtension +
-                                        ", message: " +
-                                        ex.Message)));
+                                        ", exception: " +
+                                        ex)));
                         }
                         else
                         {
+                            Response.StatusCode = 406;
                             await
                                 Response.WriteAsync(
                                     Jc.Serialize(new BasicResponse(ResponseCode.ServerError,
@@ -2220,7 +2240,7 @@ namespace ClientServer.Controllers.Core.Exercises
         /// IF a user solved the exercise with different p langs then this does not count separate because
         /// all restrictions are stored at the participation (e.g. time) and thus the p lang does not matter!
         /// 
-        /// CAN be -1 on error
+        /// CAN be -1 on error or on unset (heavy to compute...)
         /// 
         /// sometimes we want to know if a user solved an exercise multiple times
         /// e.g. when he/she is only allowed to solve it one time (e.g. an exam)
diff --git a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
index c1d49a2c931ac51436974df83fb4a48658ad5d46..fcf1e5c1f90334e90e8815b06fbe8abb599c8edc 100644
--- a/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
+++ b/src/ClientServer/Controllers/Core/Exercises/TutorViewAssessmentController.cs
@@ -505,6 +505,7 @@ namespace ClientServer.Controllers.Core.Exercises
 
             var assessment = new AssessmentFullBase()
             {
+                Token = userReleaseParticipation.User.Token,
                 FirstName = userReleaseParticipation.User.FirstName,
                 LastName = userReleaseParticipation.User.LastName,
                 UserId = userReleaseParticipation.UserId,
@@ -517,7 +518,11 @@ namespace ClientServer.Controllers.Core.Exercises
                 ManualPoints = solution.Assessment?.ManualPoints,
                 NoteForOtherTutors = solution.Assessment?.NoteForOtherTutors,
                 FeedbackForStudent = solution.Assessment?.FeedbackForStudent,
-                LastAssessmentErrorMessage = solution.Assessment?.FeedbackForStudent
+                LastAssessmentErrorMessage = solution.Assessment?.LastAssessmentErrorMessage,
+                MaxManualPoints = release.MaxManualPoint,
+                ShouldNotCount = userReleaseParticipation.ShouldNotCount, 
+                LastEditingIpAddress = solution.LastEditingIpAddress,
+                ParticipationCount = -1 //not set
             };
 
             await
diff --git a/src/ClientServer/Controllers/Core/Login/AuthController.cs b/src/ClientServer/Controllers/Core/Login/AuthController.cs
index a69354d256d35cc4ad9a3d6db93ce44327077ff4..4960fabd0e84497a18d4707c4dee5c6f4585eb46 100644
--- a/src/ClientServer/Controllers/Core/Login/AuthController.cs
+++ b/src/ClientServer/Controllers/Core/Login/AuthController.cs
@@ -498,7 +498,7 @@ namespace ClientServer.Controllers.Core.Login
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR getting test server result: " + ex.Message);
+                Console.WriteLine("ERROR getting test server result: " + ex);
                 Response.StatusCode = 200; //500 //client will only parse response if we send ok http code
                 await
                     Response.WriteAsync(
@@ -636,7 +636,7 @@ namespace ClientServer.Controllers.Core.Login
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR getting test server result: " + ex.Message);
+                Console.WriteLine("ERROR getting test server result: " + ex);
                 await
                     Response.WriteAsync(
                         Jc.Serialize(new BasicResponse(ResponseCode.ServerError, "decode error")));
diff --git a/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs b/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs
index 4a942a76341d7b084011aca5c60fe6dd08cafdd2..188bf2ad0435b9f9abbaff47842c6e25c0beb37d 100644
--- a/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs
+++ b/src/ClientServer/Controllers/Core/Login/AuthTokenController.cs
@@ -98,7 +98,7 @@ namespace ClientServer.Controllers.Core.Login
             }
             catch (Exception ex)
             {
-                Console.WriteLine("error creating auth token: " + ex.Message);
+                Console.WriteLine("error creating auth token: " + ex);
                 await base.HandleDbError(ex);
                 csrfToken = null;
                 return new AuthTokenTuple () {
@@ -148,7 +148,7 @@ namespace ClientServer.Controllers.Core.Login
             }
             catch (Exception ex)
             {
-                Console.WriteLine("error extending token lifetime: " + ex.Message);
+                Console.WriteLine("error extending token lifetime: " + ex);
                 //suppress errors
                 //base.HandleDbError(ex);
                 return null;
diff --git a/src/ClientServer/Controllers/Core/SystemSettingsController.cs b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
index e8d199d5135a3893fc465e378f7c5067d0300a13..2956a9b2d6510ca0be59b761e2304ecfdd6bfe59 100644
--- a/src/ClientServer/Controllers/Core/SystemSettingsController.cs
+++ b/src/ClientServer/Controllers/Core/SystemSettingsController.cs
@@ -378,7 +378,7 @@ namespace ClientServer.Controllers.Core
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine("ERROR getting test server settings: " + ex.Message);
+                    Console.WriteLine("ERROR getting test server settings: " + ex);
                     //throw;
 
                     await
@@ -408,7 +408,7 @@ namespace ClientServer.Controllers.Core
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR deserializing, message: " + ex.Message + ", time: " + DateTime.Now);
+                Console.WriteLine("ERROR deserializing, message: " + ex + ", time: " + DateTime.Now);
                 Console.WriteLine("text tried to deserialize: " + contentResult);
 
                 await
diff --git a/src/ClientServer/Controllers/Core/Testing/TestingController.cs b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
index 4e20fcc5007add8ef2bad22383a37ca75582b22c..e9d623b8c4371c7030798815e8e29e8bdd2b662b 100644
--- a/src/ClientServer/Controllers/Core/Testing/TestingController.cs
+++ b/src/ClientServer/Controllers/Core/Testing/TestingController.cs
@@ -210,12 +210,12 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR: test server timeout hit?: " + ex.Message);
+                Console.WriteLine("ERROR: test server timeout hit?: " + ex);
                 //probably timeout hit (not from the test program but the request
                 string reason = "";
                 if (AppConfiguration.IsDebugMode)
                 {
-                    reason = ", error: " + ex.Message;
+                    reason = ", error: " + ex;
                 }
 
                 await
@@ -356,12 +356,12 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR: test server timeout hit?: " + ex.Message);
+                Console.WriteLine("ERROR: test server timeout hit?: " + ex);
                 //probably timeout hit (not from the test program but the request
                 string reason = "";
                 if (AppConfiguration.IsDebugMode)
                 {
-                    reason = ", error: " + ex.Message;
+                    reason = ", error: " + ex;
                 }
 
                 await
@@ -527,12 +527,12 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR: test server timeout hit?: " + ex.Message);
+                Console.WriteLine("ERROR: test server timeout hit?: " + ex);
                 //probably timeout hit (not from the test program but the request
                 string reason = "";
                 if (AppConfiguration.IsDebugMode)
                 {
-                    reason = ", error: " + ex.Message;
+                    reason = ", error: " + ex;
                 }
 
                 await
@@ -1419,7 +1419,8 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception e)
             {
-                Console.WriteLine(e);
+                //we create this exception so it should be ok to send just the message...
+                Console.WriteLine("ERROR " + e);
                 await
                     Response.WriteAsync(
                         Jc.Serialize(new BasicResponse(ResponseCode.NotFound, e.Message)));
@@ -1794,7 +1795,8 @@ namespace ClientServer.Controllers.Core.Testing
                 }
                 catch (Exception e)
                 {
-                    Console.WriteLine(e);
+                    //we create this exception so it should be ok to send just the message...
+                    Console.WriteLine("ERROR " + e);
                     await
                         Response.WriteAsync(
                             Jc.Serialize(new BasicResponse(ResponseCode.NotFound, e.Message)));
@@ -1974,7 +1976,8 @@ namespace ClientServer.Controllers.Core.Testing
                 }
                 catch (Exception e)
                 {
-                    Console.WriteLine(e);
+                    //we create this exception so it should be ok to send just the message...
+                    Console.WriteLine("ERROR " + e);
                     await
                         Response.WriteAsync(
                             Jc.Serialize(new BasicResponse(ResponseCode.NotFound, e.Message)));
@@ -2210,7 +2213,8 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception e)
             {
-                Console.WriteLine(e);
+                //we create this exception so it should be ok to send just the message...
+                Console.WriteLine("ERROR " + e);
                 await
                     Response.WriteAsync(
                         Jc.Serialize(new BasicResponse(ResponseCode.NotFound, e.Message)));
@@ -2402,7 +2406,8 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception e)
             {
-                Console.WriteLine(e);
+                //we create this exception so it should be ok to send just the message...
+                Console.WriteLine("ERROR " + e);
                 await
                     Response.WriteAsync(
                         Jc.Serialize(new BasicResponse(ResponseCode.NotFound, e.Message)));
@@ -2781,7 +2786,8 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception e)
             {
-                Console.WriteLine(e);
+                //we create this exception so it should be ok to send just the message...
+                Console.WriteLine("ERROR " + e);
                 await
                     Response.WriteAsync(
                         Jc.Serialize(new BasicResponse(ResponseCode.NotFound, e.Message)));
@@ -2918,12 +2924,12 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR: test server timeout hit?: " + ex.Message);
+                Console.WriteLine("ERROR: test server timeout hit?: " + ex);
                 //probably timeout hit (not from the test program but the request
                 string reason = "";
                 if (AppConfiguration.IsDebugMode)
                 {
-                    reason = ", error: " + ex.Message;
+                    reason = ", error: " + ex;
                 }
 
                 await
@@ -3164,19 +3170,18 @@ namespace ClientServer.Controllers.Core.Testing
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine("ERROR getting test server result: " + ex.Message);
+                    Console.WriteLine("ERROR getting test server result: " + ex);
                     //throw;
                     errorDuringRequest = true;
-                    errorMessageDuringRequest = "error during connection to test server: " + ex.Message;
 
-                    if (ex.InnerException != null) {
-
-                         Console.WriteLine("... inner exception (connecting to test server): " + ex.InnerException.Message);
-
-                        if ( ex.InnerException.Message == "Couldn't connect to server") {
-                            errorMessageDuringRequest = ex.InnerException.Message.ToLower();
-                        }
+                    if (AppConfiguration.IsDebugMode)
+                    {
+                        errorMessageDuringRequest = "error during connection to test server: " + ex;
                     }
+                    else
+                    {
+                        errorMessageDuringRequest = "error during connection to test server";
+                    }                   
                 }
             }
 
@@ -3217,7 +3222,7 @@ namespace ClientServer.Controllers.Core.Testing
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR deserializing, message: " + ex.Message + ", time: " + DateTime.Now);
+                Console.WriteLine("ERROR deserializing, message: " + ex + ", time: " + DateTime.Now);
                 Console.WriteLine("text tried to deserialize: " + contentResult);
                 return new Tuple<ResponseFromTestServer, string>(null, "error deserializing test server response");;
             }
diff --git a/src/ClientServer/Controllers/Core/Users/PrivacyController.cs b/src/ClientServer/Controllers/Core/Users/PrivacyController.cs
index db33afb27330f6acd59ebe19ab2e5bba2b243add..00da59d834e7df415e3329cc46292ea31dba4d20 100644
--- a/src/ClientServer/Controllers/Core/Users/PrivacyController.cs
+++ b/src/ClientServer/Controllers/Core/Users/PrivacyController.cs
@@ -498,14 +498,14 @@ namespace ClientServer.Controllers.Core.Users
             }
             catch (Exception e)
             {
-                Console.WriteLine($"[ERROR] downloading personal data for user id: {targetUser}, error: {e.Message}");
+                Console.WriteLine($"[ERROR] downloading personal data for user id: {targetUser}, error: {e}");
 
                 if (AppConfiguration.IsDebugMode)
                 {
                     await
                         Response.WriteAsync(
                             Jc.Serialize(new BasicResponse(ResponseCode.ServerError,
-                                $"could not create personal data zip file, error: {e.Message}")));
+                                $"could not create personal data zip file, error: {e}")));
                 }
                 else
                 {
diff --git a/src/ClientServer/Controllers/dashboard/DashboardController.cs b/src/ClientServer/Controllers/dashboard/DashboardController.cs
index 94693f81bc8716eb8eb289c38b94afafff91bb6c..37d00a51925ce470d246c0dbce009e0103d442b3 100644
--- a/src/ClientServer/Controllers/dashboard/DashboardController.cs
+++ b/src/ClientServer/Controllers/dashboard/DashboardController.cs
@@ -76,10 +76,12 @@ namespace ClientServer.Controllers
             }
             catch (Exception e)
             {
+                Console.WriteLine("ERROR get hardware usage : " + e);
+                //only users with permission see this so we can output the full exception
                 await
                     Response.WriteAsync(
                         Jc.Serialize(new BasicResponseWithData<string>(ResponseCode.ServerError,
-                            "could not get hardware usage (execute error)", e.Message)));
+                            "could not get hardware usage (execute error)", e.ToString())));
                 return;
             }
 
@@ -360,13 +362,14 @@ namespace ClientServer.Controllers
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine("ERROR getting test server settings: " + ex.Message);
+                    Console.WriteLine("ERROR getting test server settings: " + ex);
                     //throw;
 
+                    //only users with permission see this so we can output the full exception
                     await
                         Response.WriteAsync(
                             Jc.Serialize(new BasicResponse(ResponseCode.ServerError,
-                                "error getting test server settings")));
+                                "error getting test server settings, error: " + ex)));
                     return;
                 }
             }
@@ -390,7 +393,7 @@ namespace ClientServer.Controllers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR deserializing, message: " + ex.Message + ", time: " + DateTime.Now);
+                Console.WriteLine("ERROR deserializing, message: " + ex + ", time: " + DateTime.Now);
                 Console.WriteLine("text tried to deserialize: " + contentResult);
 
                 await
diff --git a/src/ClientServer/Helpers/Files.cs b/src/ClientServer/Helpers/Files.cs
index fa3f0e481ecb25890920711040716aa234c94403..456f04c58a672ae95d14715e4ce2466b422f1296 100644
--- a/src/ClientServer/Helpers/Files.cs
+++ b/src/ClientServer/Helpers/Files.cs
@@ -181,8 +181,7 @@ namespace ClientServer.Helpers
             }
             catch (Exception e)
             {
-                Console.WriteLine("[ERROR] error creating file");
-                Console.WriteLine(e.Message);
+                Console.WriteLine("[ERROR] error creating file: " + e);
                 throw;
             }
 
diff --git a/src/ClientServer/Helpers/Json.cs b/src/ClientServer/Helpers/Json.cs
index 33a8887545287fecfa30e1201348179924ccb07b..50ea7bf8fc44b2259ac3e28576acdf9a43d2ffe1 100644
--- a/src/ClientServer/Helpers/Json.cs
+++ b/src/ClientServer/Helpers/Json.cs
@@ -44,7 +44,7 @@ namespace ClientServer.Helpers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("error deserializing obj: " + ex.Message);
+                Console.WriteLine("error deserializing obj: " + ex);
                 Console.WriteLine("json: " + json);
                 return null;
             }
@@ -69,7 +69,7 @@ namespace ClientServer.Helpers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("error deserializing obj: " + ex.Message);
+                Console.WriteLine("error deserializing obj: " + ex);
                 Console.WriteLine("json: " + json);
                 return null;
             }
diff --git a/src/ClientServer/Startup.cs b/src/ClientServer/Startup.cs
index 8c81cbe5b914a6e433acd7034c0e9cf5138724b2..21e2bba899dfab2bea4b75897cc82e34c3ae5276 100644
--- a/src/ClientServer/Startup.cs
+++ b/src/ClientServer/Startup.cs
@@ -88,11 +88,7 @@ namespace ClientServer
             }
             catch (Exception ex)
             {
-                Console.WriteLine("error migrating database: " + ex.Message.ToString());
-                if (ex.InnerException != null)
-                {
-                    Console.WriteLine("inner exception: " + ex.InnerException.Message.ToString());
-                }
+                Console.WriteLine("error migrating database: " + ex);
 
                 Environment.Exit(1);
             }
diff --git a/src/ClientServer/Workers/FileWorker.cs b/src/ClientServer/Workers/FileWorker.cs
index 161cede73fff5c6a771a2fc1682751ce5eed2f3d..234e94f3d515e68f5c61e1f126e619e95ec64496 100644
--- a/src/ClientServer/Workers/FileWorker.cs
+++ b/src/ClientServer/Workers/FileWorker.cs
@@ -85,8 +85,8 @@ namespace ClientServer.Workers
                         }
                         catch (Exception e)
                         {
-                            transaction.Rollback();
-                            Console.WriteLine(e);
+                            transaction.Rollback();                            
+                            Console.WriteLine("[ERROR in FileWorker, markdown]: " + e);
                             throw;
                         }
                     }
@@ -131,7 +131,7 @@ namespace ClientServer.Workers
                         catch (Exception e)
                         {
                             transaction.Rollback();
-                            Console.WriteLine(e);
+                            Console.WriteLine("[ERROR in FileWorker, test assets]: " + e);
                             throw;
                         }
                     }
@@ -178,7 +178,7 @@ namespace ClientServer.Workers
                         catch (Exception e)
                         {
                             transaction.Rollback();
-                            Console.WriteLine(e);
+                            Console.WriteLine("[ERROR in FileWorker, user assets]: " + e);
                             throw;
                         }
                     }
@@ -186,9 +186,9 @@ namespace ClientServer.Workers
                     #endregion
                 }
             }
-            catch (Exception exception)
+            catch (Exception e)
             {
-                Console.WriteLine(exception);
+                Console.WriteLine("[ERROR in FileWorker]: " + e);
             }
         }
     }
diff --git a/src/ClientServer/Workers/ReleaseWorker.cs b/src/ClientServer/Workers/ReleaseWorker.cs
index c2e517cf8bb2c10cca52bac50bad777b86c6405b..1fd89baa99c8270014757d553c1b14bb2e9073c2 100644
--- a/src/ClientServer/Workers/ReleaseWorker.cs
+++ b/src/ClientServer/Workers/ReleaseWorker.cs
@@ -107,7 +107,7 @@ namespace ClientServer.Workers
                     }
                     catch (Exception ex)
                     {
-                        Console.WriteLine(ex.Message);
+                        Console.WriteLine(ex);
                     }
 
                     if (AppConfiguration.IsDebugMode)
diff --git a/src/ClientServer/Workers/SubmissionAssessmentWorker.cs b/src/ClientServer/Workers/SubmissionAssessmentWorker.cs
index 923e035346d0c5b6b6567a63e2a53b2ab1f45ce3..a31984c2fcfb1dd91ca4c78b96f35301c7da5976 100644
--- a/src/ClientServer/Workers/SubmissionAssessmentWorker.cs
+++ b/src/ClientServer/Workers/SubmissionAssessmentWorker.cs
@@ -310,7 +310,7 @@ namespace ClientServer.Schedulers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR: " + ex.Message);
+                Console.WriteLine("ERROR: " + ex);
                 return false;
             }
 
@@ -452,7 +452,7 @@ namespace ClientServer.Schedulers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR when saving dummy automatic assessment: " + ex.Message);
+                Console.WriteLine("ERROR when saving dummy automatic assessment: " + ex);
                 return false;
             }
 
@@ -471,6 +471,7 @@ namespace ClientServer.Schedulers
         /// <param name="release">the release to use</param>
         /// <param name="context">the db context</param>
         /// <param name="testingController">the testing controller to run the tests</param>
+        /// <param name="reRunNotFinishedAssessments">true: unfinished releases are rerun (see implementation when a release is unfinished), false: not</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, YapexDbContext context,
@@ -520,7 +521,7 @@ namespace ClientServer.Schedulers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR: " + ex.Message);
+                Console.WriteLine("ERROR: " + ex);
                 return false;
             }
 
@@ -629,7 +630,7 @@ namespace ClientServer.Schedulers
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine("ERROR: " + ex.Message);
+                    Console.WriteLine("ERROR: " + ex);
                     return false;
                 }
             }
@@ -690,7 +691,7 @@ namespace ClientServer.Schedulers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR when saving finished automatic assessment: " + ex.Message);
+                Console.WriteLine("ERROR when saving finished automatic assessment: " + ex);
                 return false;
             }
 
@@ -811,7 +812,7 @@ namespace ClientServer.Schedulers
             }
             catch (Exception ex)
             {
-                Console.WriteLine("ERROR when saving (single) finished automatic assessment: " + ex.Message);
+                Console.WriteLine("ERROR when saving (single) finished automatic assessment: " + ex);
                 return false;
             }
 
@@ -988,7 +989,7 @@ namespace ClientServer.Schedulers
                     }
                     catch (Exception ex)
                     {
-                        Console.WriteLine("ERROR running normal test: " + ex.Message);
+                        Console.WriteLine("ERROR running normal test: " + ex);
                         hasError = true;
                         errorMessageForFrontend = ex.Message;
                         goto saveTestResults;
@@ -1069,7 +1070,7 @@ namespace ClientServer.Schedulers
                             }
                             catch (Exception ex)
                             {
-                                Console.WriteLine("ERROR saving test result: " + ex.Message);
+                                Console.WriteLine("ERROR saving test result: " + ex);
                                 //stop tests because others will normally fail too
                                 hasError = true;
                                 errorMessageForFrontend = "error saving test result to db";
@@ -1135,7 +1136,7 @@ namespace ClientServer.Schedulers
                     }
                     catch (Exception ex)
                     {
-                        Console.WriteLine("ERROR running submit test: " + ex.Message);
+                        Console.WriteLine("ERROR running submit test: " + ex);
                         hasError = true;
                         errorMessageForFrontend = ex.Message;
                         goto saveTestResults;
@@ -1213,7 +1214,7 @@ namespace ClientServer.Schedulers
                             }
                             catch (Exception ex)
                             {
-                                Console.WriteLine("ERROR saving submit test result: " + ex.Message);
+                                Console.WriteLine("ERROR saving submit test result: " + ex);
                                 //stop tests because others will normally fail too
                                 hasError = true;
                                 errorMessageForFrontend = "error saving submit test result to db";
@@ -1266,7 +1267,7 @@ namespace ClientServer.Schedulers
                 }
                 catch (Exception ex)
                 {
-                    Console.WriteLine("ERROR saving automatic assessment result: " + ex.Message);
+                    Console.WriteLine("ERROR saving automatic assessment result: " + ex);
                     hasError = true;
                     return false;
                 }