Index: README.md
===================================================================
--- README.md	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ README.md	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -13,4 +13,5 @@
   * Support for transparency in grading - students can be allowed to view 
 - Support for automatic and semi-automatic evaluation of SQL tasks based on correct solutions test samples implemented as database views
+- Support for rapid and semi-automated evaluation of database and schema design DDL tasks
 
 The system was presented at the ACM SIGITE 21:
Index: dbLearnStar-model/pom.xml
===================================================================
--- dbLearnStar-model/pom.xml	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-model/pom.xml	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -1,10 +1,8 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 
 	<groupId>dblearnstar</groupId>
 	<artifactId>dblearnstar-model</artifactId>
-	<version>0.0.4-SNAPSHOT</version>
+	<version>0.0.6-SNAPSHOT</version>
 
 	<name>dbLearnStar - Model</name>
@@ -26,7 +24,7 @@
 
 	<properties>
-		<maven.compiler.source>15</maven.compiler.source>
-		<maven.compiler.target>15</maven.compiler.target>
-		<java.version>15</java.version>
+		<maven.compiler.source>17</maven.compiler.source>
+		<maven.compiler.target>17</maven.compiler.target>
+		<java.version>17</java.version>
 
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -40,4 +38,10 @@
 			<version>2.2</version>
 		</dependency>
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-validator</artifactId>
+			<version>5.4.3.Final</version>
+		</dependency>
+
 	</dependencies>
 </project>
Index: dbLearnStar-model/src/main/java/dblearnstar/model/entities/SolutionAssessment.java
===================================================================
--- dbLearnStar-model/src/main/java/dblearnstar/model/entities/SolutionAssessment.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-model/src/main/java/dblearnstar/model/entities/SolutionAssessment.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -23,4 +23,5 @@
 import java.util.*;
 import javax.persistence.*;
+import javax.validation.constraints.*;
 
 /*
@@ -35,4 +36,5 @@
 	private String type;
 	private Float grade;
+	private String feedbackSource;
 	private StudentSubmitSolution studentSubmitSolution;
 	private TestInstanceParameters testInstanceParameters;
@@ -97,4 +99,13 @@
 	}
 
+	@Column(name = "feedback_source", length = 1000000, columnDefinition = "TEXT")
+	public String getFeedbackSource() {
+		return this.feedbackSource;
+	}
+
+	public void setFeedbackSource(String feedbackSource) {
+		this.feedbackSource = feedbackSource;
+	}
+
 	@ManyToOne(fetch = FetchType.LAZY)
 	@JoinColumn(name = "student_submit_solution_id", nullable = false, foreignKey = @ForeignKey(name = "fk_solution_assessment_student_submit_solution"))
Index: dbLearnStar-model/src/main/java/dblearnstar/model/model/ModelConstants.java
===================================================================
--- dbLearnStar-model/src/main/java/dblearnstar/model/model/ModelConstants.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-model/src/main/java/dblearnstar/model/model/ModelConstants.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -47,3 +47,18 @@
 	public static final Object AdministratorRole = "ADMINISTRATOR";
 
+	/*
+	 * Object types
+	 */
+	public static final String DBRelationalObjectTypesTABLE = "TABLE";
+	public static final String DBRelationalObjectTypesPK = "PK";
+	public static final String DBRelationalObjectTypesFK = "FK";
+	public static final String DBRelationalObjectTypesNN = "NN";
+	public static final String DBRelationalObjectTypesCHECK = "CHECK";
+	public static final String DBRelationalObjectTypesUK = "UK";
+	public static final String DBRelationalObjectTypesDATA = "DATA";
+
+	public static final String[] AllDBRelationalObjectTypes = { DBRelationalObjectTypesTABLE, DBRelationalObjectTypesPK,
+			DBRelationalObjectTypesFK, DBRelationalObjectTypesNN, DBRelationalObjectTypesCHECK,
+			DBRelationalObjectTypesUK, DBRelationalObjectTypesDATA };
+
 }
Index: dbLearnStar-webApp/pom.xml
===================================================================
--- dbLearnStar-webApp/pom.xml	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/pom.xml	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -1,3 +1,4 @@
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" 
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0">
 
 	<modelVersion>4.0.0</modelVersion>
@@ -5,5 +6,5 @@
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.6.1</version>
+		<version>2.6.4</version>
 		<relativePath />
 	</parent>
@@ -11,5 +12,5 @@
 	<groupId>dblearnstar</groupId>
 	<artifactId>dblearnstar</artifactId>
-	<version>0.8.11</version>
+	<version>0.8.13</version>
 	<name>dbLearnStar</name>
 
@@ -30,30 +31,28 @@
 
 	<properties>
-		<maven.compiler.source>15</maven.compiler.source>
-		<maven.compiler.target>15</maven.compiler.target>
-		<java.version>15</java.version>
-
-		<spring-boot.version>2.6.3</spring-boot.version>
-		<log4j.version>2.17.1</log4j.version>
-		<tapestry.version>5.8.0</tapestry.version>
-		<tapestry-testify.version>1.0.4</tapestry-testify.version>
-		<tapestry-xpath.version>1.0.1</tapestry-xpath.version>
-
-		<jackson.version>2.13.1</jackson.version>
-		<geb.version>2.3.1</geb.version>
-		<htmlunit-driver.version>2.33.3</htmlunit-driver.version>
-		<javax.json.version>1.1.4</javax.json.version>
-		<selenium.version>3.141.59</selenium.version>
-		<servlet-api.version>3.0.1</servlet-api.version>
-		<spock.version>1.3-groovy-2.5</spock.version>
-		<yasson.version>1.0.9</yasson.version>
-
-		<postgresql.version>42.3.2</postgresql.version>
-		<cas-client.version>3.6.4</cas-client.version>
+		<maven.compiler.source>17</maven.compiler.source>
+		<maven.compiler.target>17</maven.compiler.target>
+		<java-version>17</java-version>
 
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+		<spring-boot-version>2.6.4</spring-boot-version>
+		<tapestry-version>5.8.1</tapestry-version>
+		<jackson-version>2.13.1</jackson-version>
+		<log4j-version>2.17.2</log4j-version>
+	        <json-version>1.1.4</json-version>
+        	<junit-version>5.8.2</junit-version>
+		<yasson-version>2.0.4</yasson-version>
+	        <servlet-version>3.1.0</servlet-version>
+
+        	<maven-compiler-version>3.8.1</maven-compiler-version>
+	        <maven-surefire-version>3.0.0-M5</maven-surefire-version>
+
+		<postgresql-version>42.3.3</postgresql-version>
+		<cas-client-version>3.6.4</cas-client-version>
 	</properties>
 
+<!--
 	<repositories>
 		<repository>
@@ -62,5 +61,5 @@
 		</repository>
 	</repositories>
-
+-->
 
 	<dependencies>
@@ -68,5 +67,5 @@
 			<groupId>dblearnstar</groupId>
 			<artifactId>dblearnstar-model</artifactId>
-			<version>0.0.4-SNAPSHOT</version>
+			<version>0.0.6-SNAPSHOT</version>
 		</dependency>
 
@@ -81,17 +80,4 @@
 					<groupId>org.springframework.boot</groupId>
 					<artifactId>spring-boot-starter-logging</artifactId>
-				</exclusion>
-				<!-- log4j security issues -->
-				<exclusion>
-					<groupId>org.apache.logging.log4j</groupId>
-					<artifactId>log4j-core</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.apache.logging.log4j</groupId>
-					<artifactId>log4j-api</artifactId>
-				</exclusion>
-				<exclusion>
-					<groupId>org.apache.logging.log4j</groupId>
-					<artifactId>log4j-slf4j-impl</artifactId>
 				</exclusion>
 			</exclusions>
@@ -114,18 +100,18 @@
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-log4j2</artifactId>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-tomcat</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-log4j2</artifactId>
-			<scope>compile</scope>
-		</dependency>
 
 		<!-- Apache Tapestry -->
 		<dependency>
 			<groupId>org.apache.tapestry</groupId>
-			<artifactId>tapestry-hibernate</artifactId>
-			<version>${tapestry.version}</version>
+			<artifactId>tapestry-core</artifactId>
+			<version>${tapestry-version}</version>
 			<scope>compile</scope>
 		</dependency>
@@ -134,115 +120,96 @@
 			<groupId>org.apache.tapestry</groupId>
 			<artifactId>tapestry-webresources</artifactId>
-			<version>${tapestry.version}</version>
+			<version>${tapestry-version}</version>
 			<scope>compile</scope>
 		</dependency>
-		<dependency>
-			<groupId>org.apache.tapestry</groupId>
-			<artifactId>tapestry-upload</artifactId>
-			<version>${tapestry.version}</version>
-			<scope>compile</scope>
-		</dependency>
-
-		<!-- Unit Testing -->
-		<dependency>
-			<groupId>org.apache.tapestry</groupId>
-			<artifactId>tapestry-test</artifactId>
-			<version>${tapestry.version}</version>
-			<scope>test</scope>
-			<exclusions>
-				<exclusion>
-					<groupId>org.testng</groupId>
-					<artifactId>testng</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>net.sourceforge.tapestrytestify</groupId>
-			<artifactId>tapestry-testify</artifactId>
-			<version>${tapestry-testify.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>net.sourceforge.tapestryxpath</groupId>
-			<artifactId>tapestry-xpath</artifactId>
-			<version>${tapestry-xpath.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.spockframework</groupId>
-			<artifactId>spock-core</artifactId>
-			<version>${spock.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.spockframework</groupId>
-			<artifactId>spock-spring</artifactId>
-			<version>${spock.version}</version>
-			<scope>test</scope>
-		</dependency>
-
-		<!-- Integration Testing -->
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-			<exclusions>
-				<exclusion>
-					<groupId>org.springframework.boot</groupId>
-					<artifactId>spring-boot-starter-logging</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.gebish</groupId>
-			<artifactId>geb-spock</artifactId>
-			<version>${geb.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.seleniumhq.selenium</groupId>
-			<artifactId>selenium-support</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.seleniumhq.selenium</groupId>
-			<artifactId>htmlunit-driver</artifactId>
-			<scope>test</scope>
-		</dependency>
+        <!-- Uncomment this to add support for spring, hibernate, bean validation and file uploads -->
+        <!--
+        <dependency>
+            <groupId>org.apache.tapestry</groupId>
+            <artifactId>tapestry-spring</artifactId>
+            <version>${tapestry-version}</version>
+            <scope>compile</scope>
+        </dependency>
+	-->
+	<dependency>
+		<groupId>org.apache.tapestry</groupId>
+		<artifactId>tapestry-hibernate</artifactId>
+		<version>${tapestry-version}</version>
+		<scope>compile</scope>
+	</dependency>
+        <dependency>
+                <groupId>org.apache.tapestry</groupId>
+                <artifactId>tapestry-hibernate-core</artifactId>
+                <version>${tapestry-version}</version>
+                <scope>compile</scope>
+        </dependency>
+	<!--
+        <dependency>
+            <groupId>org.apache.tapestry</groupId>
+            <artifactId>tapestry-beanvalidator</artifactId>
+            <version>${tapestry-version}</version>
+            <scope>compile</scope>
+        </dependency>
+	-->
+        <dependency>
+            <groupId>org.apache.tapestry</groupId>
+            <artifactId>tapestry-upload</artifactId>
+            <version>${tapestry-version}</version>
+            <scope>compile</scope>
+        </dependency>
+        <!-- Unit Testing -->
+        <dependency>
+            <groupId>org.apache.tapestry</groupId>
+            <artifactId>tapestry-test</artifactId>
+            <version>${tapestry-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter</artifactId>
+            <version>${junit-version}</version>
+            <scope>test</scope>
+        </dependency>
 
 		<!-- Miscellaneous -->
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>${log4j-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>${log4j-version}</version>
+        </dependency>
 		<dependency>
 			<groupId>org.apache.logging.log4j</groupId>
 			<artifactId>log4j-slf4j-impl</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse</groupId>
-			<artifactId>yasson</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.glassfish</groupId>
-			<artifactId>javax.json</artifactId>
-			<version>${javax.json.version}</version>
+            <version>${log4j-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse</groupId>
+            <artifactId>yasson</artifactId>
+            <version>${yasson-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.fasterxml.jackson.core</groupId>
 			<artifactId>jackson-core</artifactId>
+            <version>${jackson-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.fasterxml.jackson.core</groupId>
 			<artifactId>jackson-databind</artifactId>
+            <version>${jackson-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>com.fasterxml.jackson.dataformat</groupId>
 			<artifactId>jackson-dataformat-yaml</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-annotations</artifactId>
+            <version>${jackson-version}</version>
 		</dependency>
 		<dependency>
 			<groupId>javax.servlet</groupId>
 			<artifactId>javax.servlet-api</artifactId>
-			<version>${servlet-api.version}</version>
+			<version>${servlet-version}</version>
 			<scope>provided</scope>
 		</dependency>
@@ -252,5 +219,5 @@
 			<groupId>org.postgresql</groupId>
 			<artifactId>postgresql</artifactId>
-			<version>${postgresql.version}</version>
+			<version>${postgresql-version}</version>
 		</dependency>
 
@@ -258,9 +225,7 @@
 			<groupId>org.jasig.cas.client</groupId>
 			<artifactId>cas-client-core</artifactId>
-			<version>${cas-client.version}</version>
-		</dependency>
-
-		<!-- for Java 14-15 -->
-		<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
+			<version>${cas-client-version}</version>
+		</dependency>
+
 		<dependency>
 			<groupId>commons-fileupload</groupId>
@@ -272,5 +237,10 @@
 			<groupId>commons-codec</groupId>
 			<artifactId>commons-codec</artifactId>
-			<version>1.15</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>commons-text</artifactId>
+			<version>1.9</version>
 		</dependency>
 
@@ -281,4 +251,5 @@
 			<version>0.42</version>
 		</dependency>
+
 		<dependency>
 			<groupId>org.webjars.npm</groupId>
@@ -286,4 +257,5 @@
 			<version>3.0.5</version>
 		</dependency>
+
 		<dependency>
 			<groupId>org.webjars.npm</groupId>
@@ -291,4 +263,5 @@
 			<version>4.28.0</version>
 		</dependency>
+
 		<dependency>
 			<groupId>org.webjars</groupId>
@@ -296,4 +269,5 @@
 			<version>4.17.1</version>
 		</dependency>
+
 		<dependency>
 			<groupId>org.webjars.npm</groupId>
@@ -301,4 +275,5 @@
 			<version>5.63.3</version>
 		</dependency>
+
 		<dependency>
 			<groupId>org.webjars.npm</groupId>
@@ -307,24 +282,14 @@
 		</dependency>
 
-		<!-- security patches -->
-		<dependency>
-			<groupId>org.apache.logging.log4j</groupId>
-			<artifactId>log4j-core</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.logging.log4j</groupId>
-			<artifactId>log4j-slf4j-impl</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.logging.log4j</groupId>
-			<artifactId>log4j-api</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
 		<dependency>
 			<groupId>com.github.vertical-blank</groupId>
 			<artifactId>sql-formatter</artifactId>
 			<version>2.0.3</version>
+		</dependency>
+
+		<dependency>
+			<groupId>net.objecthunter</groupId>
+			<artifactId>exp4j</artifactId>
+			<version>0.4.8</version>
 		</dependency>
 	</dependencies>
@@ -391,8 +356,59 @@
 
 		<plugins>
-			<plugin>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-maven-plugin</artifactId>
-			</plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <id>enforce-maven</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireMavenVersion>
+                                    <version>3.5.0</version>
+                                </requireMavenVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven-compiler-version}</version>
+                <configuration>
+                    <release>17</release>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>${maven-surefire-version}</version>
+                <configuration>
+                    <systemPropertyVariables>
+                        <propertyName>firefox</propertyName>
+                    </systemPropertyVariables>
+                </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.apache.maven.surefire</groupId>
+                        <artifactId>surefire-junit-platform</artifactId>
+                        <version>${maven-surefire-version}</version>
+                    </dependency>
+                    <dependency>
+                        <groupId>org.apache.maven.surefire</groupId>
+                        <artifactId>surefire-testng</artifactId>
+                        <version>${maven-surefire-version}</version>
+                    </dependency>
+                </dependencies>
+            </plugin>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+            </plugin>
+
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
@@ -461,16 +477,8 @@
 			</plugin>
 
+
 		</plugins>
 
 	</build>
 
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>org.eclipse</groupId>
-				<artifactId>yasson</artifactId>
-				<version>${yasson.version}</version>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
 </project>
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/components/Layout.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/components/Layout.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/components/Layout.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -99,5 +99,6 @@
 			return new String[] { "admin/ManagePersons", "admin/GroupManagement", "admin/ManageModels",
 					"admin/TestAdmin", "admin/TestCollectionManagement", "admin/StudentGroupProgress",
-					"admin/SubmissionEvaluations", "admin/Reevaluation", "admin/ActiveUsers", "admin/TranslationPage" };
+					"admin/SubmissionEvaluations", "admin/Reevaluation", "admin/ActiveUsers", "admin/TranslationPage",
+					"admin/SystemParameters" };
 		} else {
 			return null;
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/model/ApplicationConstants.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/model/ApplicationConstants.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/model/ApplicationConstants.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -0,0 +1,25 @@
+package dblearnstar.webapp.model;
+
+public class ApplicationConstants {
+
+	public static String EPRMS_JDBC_DRIVER = "eprms.jdbc.driver";
+	public static String EPRMS_JDBC_URL = "eprms.jdbc.url";
+	public static String EPRMS_JDBC_SCHEMA = "eprms.jdbc.default_schema";
+	public static String EPRMS_JDBC_USERNAME = "eprms.jdbc.username";
+	public static String EPRMS_JDBC_PASSWORD = "eprms.jdbc.password";
+
+	public static String STUDENTDBS_JDBC_DRIVER = "studentdbs.jdbc.driver";
+	public static String STUDENTDBS_JDBC_URL = "studentdbs.jdbc.url";
+	public static String STUDENTDBS_JDBC_SCHEMA = "studentdbs.jdbc.default_schema";
+	public static String STUDENTDBS_JDBC_USERNAME = "studentdbs.jdbc.username";
+	public static String STUDENTDBS_JDBC_PASSWORD = "studentdbs.jdbc.password";
+
+	public static String DATEFORMAT_SUBMISSION = "yyyyMMdd-HHmmss";
+	public static String DATEFORMAT_AUDIT = "yyyy-MM-dd'T'HH:mm:ss";
+	public static String DATEFORMAT_AUDITDATEONLY = "yyyy-MM-dd";
+	public static String DATEFORMAT_GUI_DATE = "dd.MM.yyyy";
+	public static String DATEFORMAT_GUI_TIME = "HH:mm";
+	public static String DATEFORMAT_GUI_DATETIME = "dd.MM.yyyy HH:mm:ss";
+	public static String DATEFORMAT_CONDENSED = "yyyyMMdd";
+
+}
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/QueryTest.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/QueryTest.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/QueryTest.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -728,5 +728,5 @@
 
 	public boolean isTEXT() {
-		return TaskTypeChecker.isTEXT(codeType);
+		return TaskTypeChecker.isTEXT(codeType) || TaskTypeChecker.isDDL(codeType);
 	}
 
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/admin/SubmissionEvaluations.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/admin/SubmissionEvaluations.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/admin/SubmissionEvaluations.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -383,4 +383,13 @@
 	}
 
+	public boolean isFilterTaskDDL() {
+		if (filterTaskInTestInstance != null) {
+			return filterTaskInTestInstance.getTask().getTaskIsOfTypes().stream()
+					.anyMatch(tti -> tti.getTaskType().getCodetype().equals(ModelConstants.TaskCodeDDL));
+		} else {
+			return false;
+		}
+	}
+
 	public boolean isUPLOAD() {
 		return TaskTypeChecker.isUPLOAD(testManager.getCodeType(submission));
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/instructor/RelationSchemaEvaluation.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/instructor/RelationSchemaEvaluation.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/instructor/RelationSchemaEvaluation.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -0,0 +1,419 @@
+package dblearnstar.webapp.pages.instructor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.tapestry5.annotations.Import;
+import org.apache.tapestry5.annotations.InjectComponent;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.commons.Messages;
+import org.apache.tapestry5.corelib.components.Zone;
+import org.apache.tapestry5.hibernate.annotations.CommitAfter;
+import org.apache.tapestry5.http.services.Request;
+import org.apache.tapestry5.ioc.annotations.Inject;
+import org.apache.tapestry5.services.SelectModelFactory;
+import org.apache.tapestry5.services.ajax.AjaxResponseRenderer;
+import org.slf4j.Logger;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+import dblearnstar.model.entities.SolutionAssessment;
+import dblearnstar.model.entities.StudentSubmitSolution;
+import dblearnstar.model.entities.TaskInTestInstance;
+import dblearnstar.model.model.ModelConstants;
+import dblearnstar.model.model.Triplet;
+import dblearnstar.model.model.UserInfo;
+import dblearnstar.webapp.annotations.AdministratorPage;
+import dblearnstar.webapp.annotations.InstructorPage;
+import dblearnstar.webapp.services.EvaluationService;
+import dblearnstar.webapp.services.GenericService;
+import dblearnstar.webapp.services.SystemConfigService;
+import net.objecthunter.exp4j.Expression;
+import net.objecthunter.exp4j.ExpressionBuilder;
+
+@AdministratorPage
+@InstructorPage
+@Import(module = { "zoneUpdateEffect" })
+public class RelationSchemaEvaluation {
+
+	@Inject
+	private Logger logger;
+	@Inject
+	private Messages messages;
+
+	@SessionState
+	private UserInfo userInfo;
+
+	@Inject
+	private GenericService genericService;
+	@Inject
+	private EvaluationService evaluationService;
+	@Inject
+	private SystemConfigService systemConfigService;
+
+	public String[] getModel() {
+		return ModelConstants.AllDBRelationalObjectTypes;
+	}
+
+	@Property
+	private TaskInTestInstance taskInTestInstanceToGrade;
+
+	@Property
+	private StudentSubmitSolution submission;
+	@Persist
+	@Property
+	private String filterType;
+	@Persist
+	@Property
+	private String filterTableName;
+
+	@Persist
+	@Property
+	private String filterDB;
+
+	@Property
+	private String oneHeader;
+	@Property
+	private String[] oneRow;
+	@Property
+	private String oneColumn;
+
+	@Persist
+	@Property
+	List<String[]> evaluationData;
+	@Persist
+	@Property
+	List<String> resultsHeadersSimple;
+	@Persist
+	@Property
+	List<String> resultsErrors;
+
+	void onActivate(TaskInTestInstance taskInTestInstance) {
+		taskInTestInstanceToGrade = genericService.getByPK(TaskInTestInstance.class,
+				taskInTestInstance.getTaskInTestInstanceId());
+		if (evaluationData == null || evaluationData.size() == 0) {
+			onLoadSavedData();
+			ComparatorEvaluationData ced = new ComparatorEvaluationData();
+			Collections.sort(evaluationData, ced);
+		}
+	}
+
+	List<StudentSubmitSolution> getSubmissions() {
+		return evaluationService.getOnlyLastSubmissionsByStudentAndTaskInTestInstance(null,
+				taskInTestInstanceToGrade.getTestInstance(), taskInTestInstanceToGrade, true, false);
+	}
+
+	public TaskInTestInstance onPassivate() {
+		return taskInTestInstanceToGrade;
+	}
+
+	public List<String[]> getFilteredEvaluationData() {
+		try {
+			List<String[]> list = evaluationData;
+			if (filterType != null) {
+				list = list.stream().filter(r -> ((String) r[2]).contains(filterType)).collect(Collectors.toList());
+			}
+			if (filterDB != null && filterDB.length() > 0) {
+				list = list.stream().filter(r -> ((String) r[3]).toLowerCase().contains(filterDB.toLowerCase()))
+						.collect(Collectors.toList());
+			}
+			if (filterTableName != null && filterTableName.length() > 0) {
+				list = list.stream().filter(r -> ((String) r[4]).toLowerCase().contains(filterTableName.toLowerCase()))
+						.collect(Collectors.toList());
+			}
+			return list;
+		} catch (Exception e) {
+			logger.error("filtering error {}", e.getMessage());
+			return new ArrayList<String[]>();
+		}
+	}
+
+	@Inject
+	private SelectModelFactory selectModelFactory;
+
+	@InjectComponent
+	private Zone zEvaluationTable;
+
+	@Inject
+	private Request request;
+
+	@Inject
+	private AjaxResponseRenderer ajaxResponseRenderer;
+
+	public void onSuccessFromFormFilter() {
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	private void setEvaluationPointGrade(Object[] context, String grade) {
+		String[] object = evaluationData.stream().filter(e -> Arrays.equals(e, context)).findFirst().orElse(null);
+		if (object == null) {
+			logger.error("{} not found", context);
+		} else {
+			object[1] = grade;
+		}
+	}
+
+	public void onMarkPos(Object[] context) {
+		setEvaluationPointGrade(context, "1");
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onMarkNeg(Object[] context) {
+		setEvaluationPointGrade(context, "-1");
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onMarkZero(Object[] context) {
+		setEvaluationPointGrade(context, "0");
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onMarkReset(Object[] context) {
+		setEvaluationPointGrade(context, null);
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onSetUngradedPos() {
+		for (String[] ss : getFilteredEvaluationData()) {
+			if (ss[1] == null || ss[1].equals("")) {
+				setEvaluationPointGrade(ss, "1");
+			}
+		}
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onSetUngradedNeg() {
+		for (String[] ss : getFilteredEvaluationData()) {
+			if (ss[1] == null || ss[1].equals("")) {
+				setEvaluationPointGrade(ss, "-1");
+			}
+		}
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onSetUngradedZero() {
+		for (String[] ss : getFilteredEvaluationData()) {
+			if (ss[1] == null || ss[1].equals("")) {
+				setEvaluationPointGrade(ss, "0");
+			}
+		}
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public void onResetGraded() {
+		for (String[] ss : getFilteredEvaluationData()) {
+			setEvaluationPointGrade(ss, null);
+		}
+		if (request.isXHR()) {
+			ajaxResponseRenderer.addRender(zEvaluationTable);
+		}
+	}
+
+	public String getGenContext() {
+		return oneRow[0] + "!" + oneRow[1] + "!" + oneRow[2] + "!" + oneRow[3];
+	}
+
+	public String[] getParsedRow() {
+		return Arrays.copyOfRange(oneRow, 1, oneRow.length);
+	}
+
+	public String getCorrectnessClass() {
+		if (oneRow != null && oneRow[1] != null) {
+			Integer grade = Integer.parseInt(oneRow[1]);
+			if (grade > 0) {
+				return "grade-pos";
+			} else if (grade == 0) {
+				return "grade-zero";
+			} else if (grade < 0) {
+				return "grade-neg";
+			} else {
+				return "";
+			}
+		} else {
+			return "";
+		}
+	}
+
+	private Long evalPoints(long submissionId, String evalPart) {
+		Long sum = 0L;
+		for (String[] tableUserDataPoint : evaluationData.stream()
+				.filter(e -> e[2].equals(evalPart) && e[0].equals(Long.toString(submissionId)))
+				.collect(Collectors.toList())) {
+			if (tableUserDataPoint[1] != null) {
+				sum += Long.parseLong(tableUserDataPoint[1]);
+			}
+		}
+		return sum;
+	}
+
+	private long calcNumElements(long submissionId, String evalPart) {
+		return evaluationData.stream().filter(e -> e[2].equals(evalPart) && e[0].equals(Long.toString(submissionId)))
+				.collect(Collectors.toList()).size();
+	}
+
+	public void onLoadSavedData() {
+		evaluationData = new ArrayList<String[]>();
+		for (StudentSubmitSolution submission : getSubmissions()) {
+			if (submission.getEvaluations() != null && submission.getEvaluations().size() > 0) {
+				if (submission.getEvaluations().size() == 1) {
+					SolutionAssessment sa = submission.getEvaluations().get(0);
+					if (sa.getFeedbackSource() != null) {
+						ObjectMapper mapper = new ObjectMapper();
+						mapper.enable(SerializationFeature.INDENT_OUTPUT);
+						try {
+							List<String[]> partialData = mapper.readValue(sa.getFeedbackSource(),
+									new TypeReference<List<String[]>>() {
+									});
+							logger.info("From JSON {} {}", submission.getStudentSubmitSolutionId(), partialData.size());
+							evaluationData.addAll(partialData);
+						} catch (Exception e) {
+							e.printStackTrace();
+						}
+					}
+				} else {
+					throw new RuntimeException("Too many evaluations");
+				}
+			}
+		}
+	}
+
+	@CommitAfter
+	public void onSaveDataAndGenerateReports() {
+		for (StudentSubmitSolution submission : getSubmissions()) {
+			String assessmentComment = "<h2>Evaluation report of the relational schema</h2>\n";
+			double total = 0;
+			String formula = systemConfigService.getCode("Task", taskInTestInstanceToGrade.getTask().getTaskId(),
+					"FORMULA");
+			HashMap<String, Long> sums = new HashMap<String, Long>();
+
+			for (String s : ModelConstants.AllDBRelationalObjectTypes) {
+				Long points = evalPoints(submission.getStudentSubmitSolutionId(), s);
+				sums.put(s, points);
+				Long numElements = calcNumElements(submission.getStudentSubmitSolutionId(), s);
+				assessmentComment += "<p>Evaluting part <b>" + s.toString() + "</b>: we have found "
+						+ numElements.toString() + " elements in your DB relational schema.<br/>\n";
+				assessmentComment += "After checking for correctness you were awarded " + points.toString()
+						+ " points.<p>";
+			}
+
+			if (formula != null) {
+				Expression e = new ExpressionBuilder(formula)
+						.variables(ModelConstants.DBRelationalObjectTypesTABLE,
+								ModelConstants.DBRelationalObjectTypesPK, ModelConstants.DBRelationalObjectTypesFK,
+								ModelConstants.DBRelationalObjectTypesNN, ModelConstants.DBRelationalObjectTypesCHECK,
+								ModelConstants.DBRelationalObjectTypesUK, ModelConstants.DBRelationalObjectTypesDATA)
+						.build()
+						.setVariable(ModelConstants.DBRelationalObjectTypesTABLE,
+								sums.get(ModelConstants.DBRelationalObjectTypesTABLE))
+						.setVariable(ModelConstants.DBRelationalObjectTypesPK,
+								sums.get(ModelConstants.DBRelationalObjectTypesPK))
+						.setVariable(ModelConstants.DBRelationalObjectTypesFK,
+								sums.get(ModelConstants.DBRelationalObjectTypesFK))
+						.setVariable(ModelConstants.DBRelationalObjectTypesNN,
+								sums.get(ModelConstants.DBRelationalObjectTypesNN))
+						.setVariable(ModelConstants.DBRelationalObjectTypesCHECK,
+								sums.get(ModelConstants.DBRelationalObjectTypesCHECK))
+						.setVariable(ModelConstants.DBRelationalObjectTypesUK,
+								sums.get(ModelConstants.DBRelationalObjectTypesUK))
+						.setVariable(ModelConstants.DBRelationalObjectTypesDATA,
+								sums.get(ModelConstants.DBRelationalObjectTypesDATA));
+				total = e.evaluate();
+			} else {
+				total = -1;
+			}
+
+			assessmentComment += "<p>Total score: " + total + "</p>";
+			SolutionAssessment sa = null;
+			if (submission.getEvaluations() == null || submission.getEvaluations().size() == 0) {
+				sa = new SolutionAssessment();
+				sa.setStudentSubmitSolution(submission);
+			} else {
+				sa = submission.getEvaluations().get(0);
+			}
+			sa.setGrade((float) total);
+			sa.setEvaluatedOn(new Date());
+			sa.setFeedback(assessmentComment);
+			sa.setPassed(true);
+
+			ObjectMapper mapper = new ObjectMapper();
+			mapper.enable(SerializationFeature.INDENT_OUTPUT);
+			try {
+				List<String[]> partialData = evaluationData.stream()
+						.filter(e -> e[0].equals(Long.toString(submission.getStudentSubmitSolutionId())))
+						.collect(Collectors.toList());
+				logger.info("To JSON {} {}", submission.getStudentSubmitSolutionId(), partialData.size());
+				String json = mapper.writeValueAsString(partialData);
+				sa.setFeedbackSource(json);
+			} catch (Exception e) {
+				logger.error("JSON convertion {}", e.getMessage());
+			}
+			genericService.saveOrUpdate(sa);
+		}
+	}
+
+	void onRefreshData() {
+		Triplet<List<String[]>, List<String>, List<String>> results = evaluationService
+				.getDDLEvaluationDataFromStudentDatabases(getSubmissions());
+		evaluationData = results.getFirstItem();
+		resultsHeadersSimple = results.getSecondItem();
+		resultsErrors = results.getThirdItem();
+	}
+
+	public class ComparatorEvaluationData implements Comparator<String[]> {
+
+		public String getCoding(String[] array) {
+			String res = "";
+			for (int i = 4; i < array.length; i++) {
+				if (array[i] != null) {
+					res += array[i] + "|";
+				} else {
+					res += "|";
+				}
+			}
+			return res;
+		}
+
+		@Override
+		public int compare(String[] s1, String[] s2) {
+			String coded1 = getCoding(s1);
+			String coded2 = getCoding(s2);
+			if (coded1.length() < coded2.length()) {
+				return -1;
+			} else {
+				if (coded1.length() > coded2.length()) {
+					return 1;
+				} else {
+					return coded1.compareTo(coded2);
+				}
+			}
+		}
+
+	}
+
+}
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/AppModule.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/AppModule.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/AppModule.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -71,4 +71,5 @@
 		binder.bind(TestManager.class);
 		binder.bind(TranslationService.class);
+		binder.bind(SystemConfigService.class);
 	}
 
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationService.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationService.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationService.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -21,4 +21,6 @@
 package dblearnstar.webapp.services;
 
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.List;
 
@@ -55,8 +57,14 @@
 
 	/**
-	 * @return <resultsSimple, resultsHeadersSimple, resultsErrors>
+	 * @return <evaluationData, resultsHeadersSimple, resultsErrors>
 	 */
 	Triplet<List<Object[]>, List<String>, List<String>> getEvalResultsForViewing(String userName, String queryToRun,
 			TaskInTestInstance taskInTestInstance, TestInstanceParameters tip, String schema);
 
+	public List<String[]> execQuery(StudentSubmitSolution submission, Connection connection, String gradingSchema,
+			String string) throws SQLException;
+
+	public Triplet<List<String[]>, List<String>, List<String>> getDDLEvaluationDataFromStudentDatabases(
+			List<StudentSubmitSolution> submissions);
+
 }
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationServiceImpl.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationServiceImpl.java	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/EvaluationServiceImpl.java	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -25,5 +25,7 @@
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.sql.SQLWarning;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
@@ -48,4 +50,6 @@
 import dblearnstar.model.entities.TestInstanceParameters;
 import dblearnstar.model.model.Triplet;
+import dblearnstar.webapp.model.ApplicationConstants;
+import dblearnstar.webapp.util.AppConfig;
 
 public class EvaluationServiceImpl implements EvaluationService {
@@ -277,6 +281,6 @@
 			}
 			String queryStringOutro = """
-					and sssL.submittedOn>=all (
-					    select sssR.submittedOn from StudentSubmitSolution sssR
+					and sssL.submittedOn in (
+					    select max(sssR.submittedOn) from StudentSubmitSolution sssR
 					    where
 					    	sssL.studentStartedTest.student.studentId=sssR.studentStartedTest.student.studentId and
@@ -330,5 +334,5 @@
 
 	/**
-	 * @return <resultsSimple, resultsHeadersSimple, resultsErrors>
+	 * @return <evaluationData, resultsHeadersSimple, resultsErrors>
 	 */
 	@Override
@@ -431,5 +435,5 @@
 
 	/**
-	 * @return <resultsSimple, resultsHeadersSimple, resultsErrors>
+	 * @return <evaluationData, resultsHeadersSimple, resultsErrors>
 	 */
 	@Override
@@ -548,7 +552,311 @@
 		}
 
-		Triplet<List<Object[]>, List<String>, List<String>> results = new Triplet<List<Object[]>, List<String>, List<String>>(
-				resultsSimple, resultsHeadersSimple, resultsErrors);
-		return results;
-	}
+		return new Triplet<List<Object[]>, List<String>, List<String>>(resultsSimple, resultsHeadersSimple,
+				resultsErrors);
+	}
+
+	@Override
+	public List<String[]> execQuery(StudentSubmitSolution submission, Connection connection, String gradingSchema,
+			String queryToRun) throws SQLException {
+		List<String[]> resultData = new ArrayList<String[]>();
+
+		PreparedStatement stat = connection.prepareStatement(queryToRun);
+		if (gradingSchema != null) {
+			stat.setString(1, gradingSchema);
+		}
+		ResultSet rs = stat.executeQuery();
+		boolean isNextRow = rs.next();
+		int numColumns = rs.getMetaData().getColumnCount();
+
+		while (isNextRow) {
+			String[] o = new String[numColumns + 2];
+			o[0] = Long.toString(submission.getStudentSubmitSolutionId());
+			o[1] = null; // grade
+			for (int i = 1; i <= numColumns; i++) {
+				Object ofromq = rs.getObject(i);
+				if (ofromq == null) {
+					o[i + 1] = null;
+				} else {
+					o[i + 1] = ofromq.toString();
+				}
+			}
+			resultData.add(o);
+			isNextRow = rs.next();
+		}
+		rs.close();
+
+		return resultData;
+	}
+
+	@Override
+	public Triplet<List<String[]>, List<String>, List<String>> getDDLEvaluationDataFromStudentDatabases(
+			List<StudentSubmitSolution> submissions) {
+		List<String[]> ddlEvaluationData = new ArrayList<String[]>();
+		List<String> resultsHeadersSimple = new ArrayList<String>();
+		List<String> resultsErrors = new ArrayList<String>();
+
+		String[] queryToRun = {
+				"""
+						select 'TABLE' type,
+						table_catalog, table_name,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=1) col1,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=2) col2,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=3) col3,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=4) col4,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=5) col5,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=6) col6,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=7) col7,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=8) col8,
+							(select column_name  from information_schema.columns isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and ordinal_position=9) col9
+						from information_schema.tables ist
+						where table_schema=?
+						order by table_catalog, table_name
+						""",
+				"""
+						select 'PK',
+							table_catalog, table_name,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=1) col1,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=2) col2,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=3) col3,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=4) col4,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=5) col5,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=6) col6,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=7) col7,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=8) col8,
+							(select column_name  from information_schema.key_column_usage isc where isc.table_catalog=ist.table_catalog and isc.table_schema=ist.table_schema and
+								isc.table_name=ist.table_name and isc.constraint_name=ist.constraint_name and isc.ordinal_position=9) col9
+							from information_schema.table_constraints ist
+						where table_schema =? and ist.constraint_type='PRIMARY KEY'
+							order by table_catalog, table_schema, table_name
+						""",
+				"""
+						select 'FK', tco.table_catalog, kcu.table_name as foreign_table,
+						       rel_tco.table_name as primary_table,
+						       string_agg(kcu.column_name, ', ') as fk_columns,
+						       string_agg(kcu2.column_name, ', ') as pk_columns
+						from information_schema.table_constraints tco
+						join information_schema.key_column_usage kcu
+							on (tco.constraint_schema,tco.constraint_name) = (kcu.constraint_schema,kcu.constraint_name)
+						join information_schema.key_column_usage kcu2
+							on (kcu.constraint_schema,kcu.constraint_name,kcu.ordinal_position) = (kcu2.constraint_schema,kcu2.constraint_name,kcu2.ordinal_position)
+						join information_schema.referential_constraints rco
+							on (tco.constraint_schema,tco.constraint_name) = (rco.constraint_schema,rco.constraint_name)
+						join information_schema.table_constraints rel_tco
+							on (rco.unique_constraint_schema,rco.unique_constraint_name) = (rel_tco.constraint_schema,rel_tco.constraint_name)
+						where tco.constraint_type = 'FOREIGN KEY' and tco.table_schema=?
+						group by tco.table_catalog, kcu.table_schema, kcu.table_name, kcu2.table_schema, kcu2.table_name,
+						         rel_tco.table_name, rel_tco.table_schema, kcu.constraint_name, kcu2.constraint_name
+						order by kcu.table_schema, kcu.table_name
+						""",
+				"""
+						select 'NN',table_catalog, table_name,   column_name
+						from information_schema.columns where is_nullable='NO' and table_schema=?
+						order by table_catalog, table_name;
+						""",
+				"""
+						SELECT 'CHECK',
+						       current_database(),
+						       source_table::regclass,
+						       source_attr1.attname AS source_col1,
+						       source_attr2.attname AS source_col2,
+						       source_attr3.attname AS source_col3,
+						       source_attr4.attname AS source_col4,
+						       source_attr5.attname AS source_col5,
+						       consrc
+						FROM
+						  (SELECT consrc, connamespace, conname,
+						          source_table,
+						          target_table,
+						          source_constraints[1] AS source_cons1,
+						          source_constraints[2] AS source_cons2,
+						          source_constraints[3] AS source_cons3,
+						          source_constraints[4] AS source_cons4,
+						          source_constraints[5] AS source_cons5
+						   FROM
+						     (SELECT pg_get_constraintdef(oid) consrc, conname, connamespace, conrelid as source_table,
+						             confrelid AS target_table, conkey AS source_constraints, confkey AS target_constraints
+						      FROM pg_constraint
+						      WHERE contype = 'c'
+						     ) query1
+						  ) query2
+						  left outer join pg_attribute source_attr1 on source_attr1.attnum = source_cons1 AND source_attr1.attrelid = source_table
+						  left outer join pg_attribute source_attr2 on source_attr2.attnum = source_cons2 AND source_attr2.attrelid = source_table
+						  left outer join pg_attribute source_attr3 on source_attr3.attnum = source_cons3 AND source_attr3.attrelid = source_table
+						  left outer join pg_attribute source_attr4 on source_attr4.attnum = source_cons4 AND source_attr4.attrelid = source_table
+						  left outer join pg_attribute source_attr5 on source_attr5.attnum = source_cons5 AND source_attr5.attrelid = source_table
+						where (SELECT nspname FROM pg_namespace WHERE oid=connamespace)=?
+						""",
+				"""
+						SELECT 'UK',
+						       current_database() baza,
+						       source_table::regclass,
+						       source_attr1.attname AS source_col1,
+						       source_attr2.attname AS source_col2,
+						       source_attr3.attname AS source_col3,
+						       source_attr4.attname AS source_col4,
+						       source_attr5.attname AS source_col5,
+						       consrc
+						FROM
+						  (SELECT consrc, connamespace, conname,
+						          source_table,
+						          target_table,
+						          source_constraints[1] AS source_cons1,
+						          source_constraints[2] AS source_cons2,
+						          source_constraints[3] AS source_cons3,
+						          source_constraints[4] AS source_cons4,
+						          source_constraints[5] AS source_cons5
+						   FROM
+						     (SELECT pg_get_constraintdef(oid) consrc, conname, connamespace, conrelid as source_table, confrelid AS target_table,
+						     	conkey AS source_constraints, confkey AS target_constraints
+						      FROM pg_constraint
+						      WHERE contype = 'u'
+						     ) query1
+						  ) query2
+						  left outer join pg_attribute source_attr1 on source_attr1.attnum = source_cons1 AND source_attr1.attrelid = source_table
+						  left outer join pg_attribute source_attr2 on source_attr2.attnum = source_cons2 AND source_attr2.attrelid = source_table
+						  left outer join pg_attribute source_attr3 on source_attr3.attnum = source_cons3 AND source_attr3.attrelid = source_table
+						  left outer join pg_attribute source_attr4 on source_attr4.attnum = source_cons4 AND source_attr4.attrelid = source_table
+						  left outer join pg_attribute source_attr5 on source_attr5.attnum = source_cons5 AND source_attr5.attrelid = source_table
+						where (SELECT nspname FROM pg_namespace WHERE oid=connamespace)=?
+												""",
+				"""
+						select 'DATA', table_catalog, c.table_name, 0 as broj
+						from information_schema.tables c
+						where
+							c.table_schema=? and
+							c.table_name not in ('')
+						order by table_catalog, table_schema, table_name
+														""" };
+
+		if (submissions.size() < 100) {
+			Connection connectionEpm = null;
+			try {
+				connectionEpm = DriverManager.getConnection(AppConfig.getString(ApplicationConstants.EPRMS_JDBC_URL),
+						AppConfig.getString(ApplicationConstants.EPRMS_JDBC_USERNAME),
+						AppConfig.getString(ApplicationConstants.EPRMS_JDBC_PASSWORD));
+				connectionEpm.setSchema(AppConfig.getString(ApplicationConstants.EPRMS_JDBC_SCHEMA));
+				connectionEpm.setAutoCommit(false);
+				connectionEpm.setReadOnly(true);
+				PreparedStatement statEpm = connectionEpm.prepareStatement("select * from database where name like ?");
+
+				for (StudentSubmitSolution submission : submissions) {
+					String student = submission.getStudentStartedTest().getStudent().getPerson().getUserName();
+
+					Connection connection = null;
+					String DbPass = "", DbName = "", DbUser = "";
+					String gradingSchema = AppConfig.getString(ApplicationConstants.STUDENTDBS_JDBC_SCHEMA);
+					String mainUrl = AppConfig.getString(ApplicationConstants.STUDENTDBS_JDBC_URL);
+
+					for (int n = 0; n < 7; n++) {
+						int statusCounter = 0;
+
+						try {
+							SimpleDateFormat sdf = new SimpleDateFormat(ApplicationConstants.DATEFORMAT_CONDENSED);
+							String formattedTestDate = sdf
+									.format(submission.getStudentStartedTest().getTestInstance().getScheduledFor());
+
+							String likestring = "db%ispit%" + student + "%" + formattedTestDate + "%";
+							statEpm.setString(1, likestring);
+							ResultSet rsEpm = statEpm.executeQuery();
+							if (rsEpm != null && rsEpm.next()) {
+								DbPass = rsEpm.getString("password");
+								DbName = rsEpm.getString("name");
+								DbUser = rsEpm.getString("owner");
+							} else {
+								logger.error("Did not find student data for {}", likestring);
+							}
+
+							Properties props = new Properties();
+							props.setProperty("user", DbUser);
+							props.setProperty("password", DbPass);
+							String url = mainUrl + "/" + DbName;
+
+							connection = DriverManager.getConnection(url, props);
+							statusCounter = 1;
+
+							connection.setClientInfo("ApplicationName", "dbLearn*RelationalEvaluator");
+							connection.setReadOnly(true);
+							connection.setAutoCommit(false);
+							connection.setSavepoint();
+							connection.setSchema(gradingSchema);
+							statusCounter = 2;
+
+							List<String[]> tempResults = execQuery(submission, connection, gradingSchema,
+									queryToRun[n]);
+							if (n == 6) {
+								for (String[] l : tempResults) {
+									String query = "SELECT count(*) FROM " + gradingSchema + "." + l[4];
+									List<String[]> countResults = execQuery(submission, connection, null, query);
+									if (countResults != null) {
+
+									}
+									l[5] = countResults.get(0)[2];
+									logger.info("{} {} {} {} ", query, countResults.get(0)[0], countResults.get(0)[1],
+											countResults.get(0)[2]);
+								}
+							}
+							ddlEvaluationData.addAll(tempResults);
+							statusCounter = 4; // 3 should be before the preparedstatement, but it is not set
+
+							SQLWarning w = connection.getWarnings();
+							if (w != null) {
+								logger.debug("warning");
+								resultsErrors.add(w.getMessage());
+							}
+							connection.rollback();
+						} catch (Exception e) {
+							if (statusCounter == 0) {
+								logger.error("{}", e);
+								resultsErrors.add(e.getMessage());
+							} else {
+								logger.error(
+										"Connected to evaluation database {}, but failed in running query {} due to {}",
+										DbName, queryToRun[n], e.getMessage());
+								logger.debug("Exception: {}", e);
+								resultsErrors.add(e.getMessage());
+							}
+						} finally {
+							if (connection != null) {
+								try {
+									connection.close();
+								} catch (Exception e) {
+									logger.error("Connection can't be closed {} {}", DbName, e.getMessage());
+								}
+							}
+						}
+					}
+				}
+			} catch (Exception e) {
+				logger.error("Cant connect to epm due to {}", e.getMessage());
+			} finally {
+				if (connectionEpm != null) {
+					try {
+						connectionEpm.close();
+					} catch (Exception e) {
+						logger.error("EPM connection can't be closed {} ", e.getMessage());
+					}
+				}
+			}
+		}
+		return new Triplet<List<String[]>, List<String>, List<String>>(ddlEvaluationData, resultsHeadersSimple,
+				resultsErrors);
+	}
+
 }
Index: dbLearnStar-webApp/src/main/resources/AppConfig.properties
===================================================================
--- dbLearnStar-webApp/src/main/resources/AppConfig.properties	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/resources/AppConfig.properties	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -12,4 +12,16 @@
 logout.redirectToServer=@logout.redirectToServer@
 
+eprms.jdbc.driver=@eprms.jdbc.driver@
+eprms.jdbc.url=@eprms.jdbc.url@
+eprms.jdbc.default_schema=@eprms.jdbc.default_schema@
+eprms.jdbc.username=@eprms.jdbc.username@
+eprms.jdbc.password=@eprms.jdbc.password@
+
+studentdbs.jdbc.driver=@studentdbs.jdbc.driver@
+studentdbs.jdbc.url=@studentdbs.jdbc.url@
+studentdbs.jdbc.default_schema=@studentdbs.jdbc.default_schema@
+studentdbs.jdbc.username=@studentdbs.jdbc.username@
+studentdbs.jdbc.password=@studentdbs.jdbc.password@
+
 date.upload.submission.format=yyyyMMdd-HHmmss
 date.audit.format=yyyy-MM-dd'T'HH:mm:ss
@@ -18,4 +30,5 @@
 time.gui.format=HH:mm
 datetime.gui.format=dd.MM.yyyy HH:mm:ss
+date.condensed.format=yyyyMMdd
 
 additionalFiles.path=@additionalFiles.path@
Index: dbLearnStar-webApp/src/main/resources/META-INF/assets/SubmissionEvaluations.css
===================================================================
--- dbLearnStar-webApp/src/main/resources/META-INF/assets/SubmissionEvaluations.css	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/resources/META-INF/assets/SubmissionEvaluations.css	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -105,5 +105,13 @@
 
 .modalSubmission {
-	min-height: 13em;
+	min-height: 23em;
+}
+
+#zSolution {
+	min-height:30em !important;
+}
+
+#solution {
+	min-height:30em !important;
 }
 
Index: dbLearnStar-webApp/src/main/resources/META-INF/assets/site-overrides.css
===================================================================
--- dbLearnStar-webApp/src/main/resources/META-INF/assets/site-overrides.css	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/resources/META-INF/assets/site-overrides.css	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -1,42 +1,26 @@
-:root {
-    --ck-z-default: 100;
-    --ck-z-modal: calc( var(--ck-z-default) + 999 );
-
-	/* https://www.w3schools.com/colors/colors_british.asp - Carnival red */
-	--color-incorrect: #c71c2c;
-
-	/* https://www.w3schools.com/colors/colors_british.asp - Bright green / Goblin / Garland */
-	--color-correct: #74b979;
-
-	--color-noevaluation: #white;
+:root { 
+	--ck-z-default: 100; 
+	--ck-z-modal: calc(var(--ck-z-default) + 999);
+	--color-incorrect-wrong: #900000; 	/* https://www.w3schools.com/colors/colors_british.asp - Carnival red */
+	--color-incorrect: #c71c2c; 	/* https://www.w3schools.com/colors/colors_british.asp - Carnival red */
+	--color-correct: #74b979; /* https://www.w3schools.com/colors/colors_british.asp - Bright green / Goblin / Garland */ 
+	--color-noevaluation: #white; 
 	--color-exception: #404040;
 }
 
-body,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6,
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6 {
-    font-family: 'Fira Sans', Helvetica, Arial, sans-serif !important;
+body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+	font-family: 'Fira Sans', Helvetica, Arial, sans-serif !important;
 }
 
-h1,.h1 {
-	font-size:200%;
+h1, .h1 {
+	font-size: 200%;
 }
 
-h2,.h2 {
-	font-size:160%;
+h2, .h2 {
+	font-size: 160%;
 }
 
-h3,.h3 {
-	font-size:130%;
+h3, .h3 {
+	font-size: 130%;
 }
 
@@ -70,17 +54,13 @@
 .inlinecomment {
 	background: #ffffa0;
-	margin-left:5rem;
+	margin-left: 5rem;
 	border-left: 1px solid black;
-	padding-left:0.5rem;
+	padding-left: 0.5rem;
 }
 
-@keyframes slidein {
-  from { background: white; }
-  50% { background: #ffffa0; }
-  to { background: white; }
-}
+@keyframes slidein {from { background:white;} 50% {background: #ffffa0;} to {background: white;}}
 
 .pagination li {
-	margin-left:0.5em;
+	margin-left: 0.5em;
 }
 
@@ -93,10 +73,10 @@
 
 #mainnav {
-	background-color: #42119c !important;  /* osnovna boja */
+	background-color: #42119c !important; /* osnovna boja */
 }
 
 #mainnav .nav-link {
 	/* Paletton Shiny */
-	color: #A074F0 !important; 
+	color: #A074F0 !important;
 }
 
@@ -118,5 +98,5 @@
 	height: 25rem !important;
 	min-height: 10em;
-	font-family: 'Fira Code', monospace, mono !important; 
+	font-family: 'Fira Code', monospace, mono !important;
 }
 
@@ -127,6 +107,6 @@
 .datefield-popup {
 	background: white;
-	padding:0.5em;
-	border-radius:6px;
+	padding: 0.5em;
+	border-radius: 6px;
 	border: 1px solid black;
 }
@@ -138,4 +118,5 @@
 
 .glyphicon-calendar::before {
-  content: "📅";
+	content: "📅";
 }
+
Index: dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/admin/SubmissionEvaluations.tml
===================================================================
--- dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/admin/SubmissionEvaluations.tml	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/admin/SubmissionEvaluations.tml	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -246,4 +246,9 @@
 
 <div t:type="zone" t:id="zSubmissions" id="zSubmissions">
+	<div class="mb-3" t:type="if" t:test="filterTaskDDL">
+		<a href="" t:type="pagelink" class="btn btn-primary"
+			t:page="instructor/RelationSchemaEvaluation"
+			t:context="filterTaskInTestInstance">${message:eval-ddl-label}</a>
+	</div>
 	<t:if t:test="filterTestInstance">
 		<div>
Index: dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/instructor/RelationSchemaEvaluation.tml
===================================================================
--- dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/instructor/RelationSchemaEvaluation.tml	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
+++ dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/instructor/RelationSchemaEvaluation.tml	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -0,0 +1,103 @@
+<html t:type="layout"
+	t:title="message:instructor/relationSchemaEvaluation-pagelink"
+	xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"
+	xmlns:p="tapestry:parameter">
+
+<style>
+.grade-pos {
+	background: var(--color-correct);
+}
+
+.grade-neg {
+	background: var(--color-incorrect-wrong);
+	color: yellow;
+}
+
+.grade-zero {
+	background: var(--color-incorrect);
+	color: white;
+}
+</style>
+
+<h1>${message:instructor/relationSchemaEvaluation-pagelink}</h1>
+
+<h2>Filter Data</h2>
+
+
+
+<div class="card card-body bg-light mb-3">
+	<form t:type="form" class="form form-inline" t:zone="zEvaluationTable"
+		t:id="formFilter">
+		<div class="form-group">
+			<label t:type="label" t:for="filterType"></label> <select
+				t:id="filterType" t:type="select" t:model="model"
+				onchange="this.form.submit()" t:value="filterType" />
+		</div>
+		<div class="form-group ml-3">
+			<label t:type="label" t:for="filterDB" /> <input t:type="textfield"
+				t:id="filterDB" t:value="filterDB" />
+		</div>
+		<div class="ml-3 mr-3 form-group">
+			<label t:type="label" t:for="filterTableName" /> <input
+				t:type="textfield" t:id="filterTableName" t:value="filterTableName" />
+		</div>
+		<t:submit t:value="Filter" />
+		<a href="" class="ml-auto btn btn-info" t:type="eventlink"
+			t:id="loadSavedData"><img t:type="svgicon"
+			t:path="file" t:height="1.5em" /> Reload saved data</a> <a href="" class="ml-auto btn btn-info" t:type="eventlink"
+			t:id="saveDataAndGenerateReports"><img t:type="svgicon"
+			t:path="database" t:height="1.5em" /> Save data &amp; generate reports</a> <a href=""
+			class="ml-auto btn btn-outline-danger" t:type="eventlink"
+			t:id="refreshData"><img t:type="svgicon" t:path="alert-triangle"
+			t:height="1.5em" /> Reconstruct the entire evaluation set</a>
+	</form>
+</div>
+
+<h2>Tables</h2>
+
+<div class="mb-3">
+	<p>
+		<a href="" class="ml-auto btn btn-success" t:type="eventlink"
+			t:id="setUngradedPos">Set ungraded to +1</a> <a href=""
+			class="ml-auto btn btn-secondary" t:type="eventlink"
+			t:id="setUngradedZero">Set ungraded to 0</a> <a href=""
+			class="ml-auto btn btn-danger" t:type="eventlink"
+			t:id="setUngradedNeg">Set ungraded to -1</a> <a href=""
+			class="ml-auto btn btn-light" t:type="eventlink" t:id="resetGraded">Reset
+			graded</a>
+	</p>
+</div>
+
+<div t:type="zone" t:id="zEvaluationTable" id="zEvaluationTable">
+	<div t:type="if" t:test="resultsErrors">${resultsErrors}</div>
+	Rows: ${filteredEvaluationData.size()}
+	<table class="table table-hover table-bordered ">
+		<thead class="table-dark">
+			<tr>
+				<th>Actions</th>
+				<th>Grade</th>
+				<th>Type</th>
+				<th>DB</th>
+				<th>Table</th>
+				<th colspan="100%">Data...</th>
+			</tr>
+		</thead>
+		<tbody>
+			<tr t:type="loop" t:source="filteredEvaluationData" t:value="oneRow"
+				class=" ${correctnessClass} ">
+				<td style="width: 10em;"><a href="" t:type="eventlink"
+					t:id="markPos" t:zone="zEvaluationTable" t:context="oneRow"
+					class="btn btn-sm btn-success">+1</a> <a href="" t:type="eventlink"
+					t:id="markZero" t:zone="zEvaluationTable" t:context="oneRow"
+					class="btn btn-sm btn-secondary">0</a> <a href=""
+					t:type="eventlink" t:id="markNeg" t:zone="zEvaluationTable"
+					t:context="oneRow" class="btn btn-sm btn-danger">-1</a> <a href=""
+					t:type="eventlink" t:id="markReset" t:zone="zEvaluationTable"
+					t:context="oneRow" class="btn btn-sm btn-light">/</a></td>
+				<td t:type="loop" t:source="parsedRow" t:value="oneColumn">${oneColumn}</td>
+			</tr>
+		</tbody>
+	</table>
+</div>
+
+</html>
Index: dbLearnStar-webApp/src/main/webapp/WEB-INF/app.properties
===================================================================
--- dbLearnStar-webApp/src/main/webapp/WEB-INF/app.properties	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/webapp/WEB-INF/app.properties	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -15,6 +15,8 @@
 admin/StudentGroupProgress-pagelink=Progress
 admin/SubmissionEvaluations-pagelink=Evaluation of Submissions
+admin/SystemParameters-pagelink=System Parameters
 admin/TestAdmin-pagelink=Tests
 admin/TestCollectionManagement-pagelink=Test Collections
+instructor/relationSchemaEvaluation-pagelink=Relation Schema Evaluation
 answeredByInstructor-label=Includes comments by an instructor
 serverTime-label=Server time
@@ -65,4 +67,5 @@
 Evaluation-label=Evaluation
 evaluationSimple-label=Evaluation DB 1
+eval-ddl-label=Evaluate DDL
 ExamsAndTasksOverview-pagelink=Tasks
 feedback-label=Feedback
Index: dbLearnStar-webApp/src/main/webapp/WEB-INF/app_mk.properties
===================================================================
--- dbLearnStar-webApp/src/main/webapp/WEB-INF/app_mk.properties	(revision 8fe879e6e04d59805751da1a4a85617ca0e9f296)
+++ dbLearnStar-webApp/src/main/webapp/WEB-INF/app_mk.properties	(revision 8e9e2e319c7701383ecd9641432d1188e9190d22)
@@ -15,6 +15,8 @@
 admin/StudentGroupProgress-pagelink=Прогрес
 admin/SubmissionEvaluations-pagelink=Прегледување поднесоци
+admin/SystemParameters-pagelink=Системски параметри
 admin/TestAdmin-pagelink=Администрација на тестови
 admin/TestCollectionManagement-pagelink=Колекции тестови
+instructor/relationSchemaEvaluation-pagelink=Евалуација на релациска шема
 answeredByInstructor-label=Содржи коментари од наставник
 serverTime-label=Време на серверот
@@ -65,4 +67,5 @@
 Evaluation-label=Евалуација
 evaluationSimple-label=Евалуација Шема 1
+eval-ddl-label=Евалуирај DDL
 ExamsAndTasksOverview-pagelink=Задачи
 feedback-label=Забелешки
