Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationServiceImpl.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationServiceImpl.java	(revision 001d15553ae6c721389c71de5e952552dac00877)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationServiceImpl.java	(revision 7e66f29220006cc2559c6892b0eeaffbc288e4f5)
@@ -27,10 +27,13 @@
 import java.sql.SQLException;
 import java.sql.SQLWarning;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Properties;
 import java.util.regex.Pattern;
 
+import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -66,4 +69,7 @@
 
 	@Inject
+	private SystemConfigService systemConfigService;
+
+	@Inject
 	private Session session;
 
@@ -72,16 +78,39 @@
 	}
 
-	private String prepareQueryStringCurrentTime(String query, String schema) {
+	private String prepareQueryStringCurrentTime(TaskInTestInstance taskInTestInstance, String query, String schema) {
+		String nowString = systemConfigService.getValue("Task", taskInTestInstance.getTask().getTaskId(),
+				"TEST_NOW_" + schema);
+		if (nowString == null) {
+			logger.warn("Missing system parameter {}", "TEST_NOW_" + schema);
+		}
+		logger.debug("TEST_NOW {}", nowString);
 		String queryStringModified = query;
+		String replaceString = schema + ".now()";
+		if (nowString != null && nowString.length() == 35 && nowString.startsWith("TIMESTAMP '")
+				&& nowString.endsWith("'")) {
+			String checkParse = nowString.substring(11, nowString.length() - 1);
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+			Date now = null;
+			try {
+				now = sdf.parse(checkParse);
+				replaceString = nowString;
+			} catch (ParseException e) {
+				logger.error("Parsing parameter {} failed with error {}", "TEST_NOW_" + schema, e.getMessage());
+			}
+		}
 		queryStringModified = Pattern.compile(Pattern.quote("now()"), Pattern.CASE_INSENSITIVE)
-				.matcher(queryStringModified).replaceAll(schema + ".now()");
+				.matcher(queryStringModified).replaceAll(replaceString);
 		queryStringModified = Pattern.compile(Pattern.quote("current_date"), Pattern.CASE_INSENSITIVE)
-				.matcher(queryStringModified).replaceAll(schema + ".now()");
+				.matcher(queryStringModified).replaceAll(replaceString);
+		logger.debug(
+				"Modded query for evaluation is \n------------------------------\n{}\n==============================",
+				queryStringModified);
 		return queryStringModified;
 	}
 
-	private String prepareQueryStringForViewing(String query, String schema, String evalViewName, String userName) {
+	private String prepareQueryStringForViewing(TaskInTestInstance taskInTestInstance, String query, String schema,
+			String evalViewName, String userName) {
 		String queryStringModified = query;
-		queryStringModified = prepareQueryStringCurrentTime(query, schema);
+		queryStringModified = prepareQueryStringCurrentTime(taskInTestInstance, query, schema);
 
 		String evalQueryString = //
@@ -100,7 +129,8 @@
 	}
 
-	private String prepareQueryStringForEval(String query, String schema, String evalViewName, String userName) {
+	private String prepareQueryStringForEval(TaskInTestInstance taskInTestInstance, String query, String schema,
+			String evalViewName, String userName) {
 		String queryStringModified = query;
-		queryStringModified = prepareQueryStringCurrentTime(query, schema);
+		queryStringModified = prepareQueryStringCurrentTime(taskInTestInstance, query, schema);
 
 		String evalQueryString = //
@@ -145,5 +175,6 @@
 					connection.setSchema(schema);
 
-					String evalQueryString = prepareQueryStringForEval(queryToRun, schema, evalViewName, userName);
+					String evalQueryString = prepareQueryStringForEval(taskInTestInstance, queryToRun, schema,
+							evalViewName, userName);
 
 					PreparedStatement pstmt = connection.prepareStatement(evalQueryString);
@@ -313,35 +344,56 @@
 				return null;
 			}
+			String newLine = System.getProperty("line.separator");
 			String queryStringIntro = """
-					from StudentSubmitSolution sssL where
-					sssL.taskInTestInstance.testInstance.testInstanceId=:testInstanceId
+					SELECT sss.*
+					FROM student_submit_solution sss
+					JOIN student_started_test sst ON sss.student_started_test_id=sst.student_started_test_id
+					WHERE 
+						sst.test_instance_id=:testInstanceId
 					""";
 			String queryStringMiddle = "";
 			if (student != null) {
-				queryStringMiddle += " and sssL.studentStartedTest.student.studentId=:studentId ";
+				queryStringMiddle += """
+						AND sst.student_id=:studentId
+						""";
+			} else {
+				queryStringMiddle += """
+						AND sst.student_id IN
+						(
+							SELECT gm.student_id
+							FROM
+								group_focus_on_test gfot
+								JOIN group_member gm ON gm.group_id=gfot.group_id
+							WHERE gfot.test_instance_id=sst.test_instance_id
+						)
+						""";
 			}
 			if (taskInTestInstance != null) {
-				queryStringMiddle += " and sssL.taskInTestInstance.taskInTestInstanceId=:taskInTestInstanceId ";
+				queryStringMiddle += """
+						AND sss.task_in_test_instance_id=:taskInTestInstanceId
+						""";
 			}
 			if (onlyCorrect != null && onlyCorrect) {
 				queryStringMiddle += """
-						and sssL.evaluationSimple=true
-						and sssL.evaluationComplex=true
-						and sssL.evaluationExam=true
+						AND sss.evaluation_simple
+						AND sss.evaluation_complex
+						AND sss.evaluation_exam
 						""";
 			}
 			if (onlyForEval != null && onlyForEval) {
-				queryStringMiddle += " and sssL.notForEvaluation=false ";
+				queryStringMiddle += """
+						AND sss.not_for_evaluation=false
+						""";
 			}
 			String queryStringOutro = """
-					and sssL.submittedOn in (
-					    select max(sssR.submittedOn) from StudentSubmitSolution sssR
-					    where
-					    	sssL.studentStartedTest.student.studentId=sssR.studentStartedTest.student.studentId and
-					    	sssL.taskInTestInstance.taskInTestInstanceId=sssR.taskInTestInstance.taskInTestInstanceId
-					) order by sssL.submittedOn desc
+					AND sss.submitted_on=
+					(
+						SELECT max(sssin.submitted_on) FROM student_submit_solution sssin
+						WHERE sssin.student_started_test_id=sss.student_started_test_id AND sssin.task_in_test_instance_id=sss.task_in_test_instance_id
+					)
+					order by sss.submitted_on desc
 					""";
-			javax.persistence.Query q = getEntityManager()
-					.createQuery(queryStringIntro + queryStringMiddle + queryStringOutro);
+			String queryString = queryStringIntro + queryStringMiddle + queryStringOutro;
+			Query q = getEntityManager().createNativeQuery(queryString, StudentSubmitSolution.class);
 			q.setParameter("testInstanceId", testInstance.getTestInstanceId());
 			if (student != null) {
@@ -530,5 +582,6 @@
 					statusCounter = 2;
 
-					String evalQueryString = prepareQueryStringForViewing(queryToRun, schema, evalViewName, userName);
+					String evalQueryString = prepareQueryStringForViewing(taskInTestInstance, queryToRun, schema,
+							evalViewName, userName);
 
 					PreparedStatement pstmt = connection.prepareStatement(evalQueryString);
