diff --git a/.gitignore b/.gitignore
index 2c0bec3c9dca32efe6064b2203aeefe09c340116..fdd8abe91e7a54c6db8d2dce5d522e4c8a61ff12 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,5 +19,5 @@
 **/.classpath
 /.idea/vcs.xml
 /.idea/workspace.xml
-
-**/.idea
\ No newline at end of file
+**/.idea
+**/GFRocketChatConfig.java
\ No newline at end of file
diff --git a/gemeinsamforschen/pom.xml b/gemeinsamforschen/pom.xml
index e23a29992f526e80c3722a35ceb67be4d603cc01..1f8ac1027375f2b712c50715652d7b90a379b5e3 100644
--- a/gemeinsamforschen/pom.xml
+++ b/gemeinsamforschen/pom.xml
@@ -165,11 +165,49 @@
             <version>1.3.4</version>
         </dependency>
 
+        <!-- websocket api -->
+        <dependency>
+            <groupId>javax.websocket</groupId>
+            <artifactId>javax.websocket-api</artifactId>
+            <version>1.1</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <!-- gson -->
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.5</version>
+        </dependency>
+
         <dependency>
             <groupId>com.atlassian.commonmark</groupId>
             <artifactId>commonmark</artifactId>
             <version>0.11.0</version>
         </dependency>
+
+
+        <!-- https://mvnrepository.com/artifact/de.dev-eth0.dummycreator/dummy-creator -->
+      <!--  <dependency>
+            <groupId>de.dev-eth0.dummycreator</groupId>
+            <artifactId>dummy-creator</artifactId>
+            <version>1.2</version>
+        </dependency>-->
+
+        <!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>2.19.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>uk.co.jemos.podam</groupId>
+            <artifactId>podam</artifactId>
+            <version>7.1.1.RELEASE</version>
+        </dependency>
+
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/assignments/Assignee.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/assignments/Assignee.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e3df15225bbdacc627bfe7cdbe77d799fde5374
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/assignments/Assignee.java
@@ -0,0 +1,15 @@
+package unipotsdam.gf.assignments;
+
+    public enum Assignee {
+        AXEL,
+        CHRISTIAN,
+        KATHARINA,
+        LUDWIG,
+        MARTIN,
+        MIRJAM,
+        QUARK,
+        SVEN,
+        THOMAS
+
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/assignments/NotImplementedLogger.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/assignments/NotImplementedLogger.java
new file mode 100644
index 0000000000000000000000000000000000000000..67e379f9a28b642da2a86de58dbcd7a0a803b3d1
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/assignments/NotImplementedLogger.java
@@ -0,0 +1,69 @@
+package unipotsdam.gf.assignments;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import unipotsdam.gf.modules.communication.view.CommunicationView;
+import unipotsdam.gf.modules.researchreport.ResearchReportManagement;
+
+import java.util.HashMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class NotImplementedLogger {
+
+    private static final Logger log = LoggerFactory.getLogger(NotImplementedLogger.class);
+    private static final ConcurrentHashMap<String, Boolean> messagesSend = new ConcurrentHashMap<String, Boolean>();
+
+    public static synchronized void logAssignment(Assignee assignee, Class element) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(assignee.name());
+        stringBuilder.append(": Please implement ");
+        stringBuilder.append(element);
+        String result = stringBuilder.toString();
+
+        if (!getMessageMap().keySet().contains(result)) {
+            log.info(result);
+        }
+        messagesSend.put(result, true);
+    }
+
+    public static synchronized void logAssignment(Assignee assignee, Class element, String fakeMessage) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(assignee.name());
+        stringBuilder.append(": Please implement ");
+        stringBuilder.append(element + "\n");
+        stringBuilder.append("process: " + fakeMessage + "\n");
+        String result = stringBuilder.toString();
+
+        if (!getMessageMap().keySet().contains(result)) {
+            log.info(result);
+        }
+        messagesSend.put(result, true);
+    }
+
+
+
+    public static void logAssignment(Assignee assignee, Class className, String method, String fakeMessage) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(assignee.name());
+        stringBuilder.append(": Please implement ");
+        stringBuilder.append(className.getCanonicalName());
+        stringBuilder.append(":");
+        stringBuilder.append(method);
+        stringBuilder.append("\n");
+        stringBuilder.append(fakeMessage);
+        String result = stringBuilder.toString();
+
+        if (!getMessageMap().keySet().contains(result)) {
+            log.info(result);
+        }
+        messagesSend.put(result, true);
+    }
+
+    public static synchronized ConcurrentHashMap<String, Boolean> getMessageMap() {
+        if (messagesSend == null) {
+            return new ConcurrentHashMap<String, Boolean>();
+        }
+        return messagesSend;
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
index 554cf0504b8783acc9589f00deaa64eb8356a581..e81dba7f42a13d78c672f2bf4fc73faa327ec64c 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
@@ -3,13 +3,33 @@ package unipotsdam.gf.config;
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
 import unipotsdam.gf.core.management.Management;
 import unipotsdam.gf.core.management.ManagementImpl;
-import unipotsdam.gf.interfaces.ICommunication;
+import unipotsdam.gf.core.states.PhasesImpl;
+import unipotsdam.gf.core.testsandbox.TestList;
+import unipotsdam.gf.core.testsandbox.TestListInterface;
+import unipotsdam.gf.interfaces.*;
+import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy;
 import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
+import unipotsdam.gf.modules.groupfinding.DummyGroupfinding;
+import unipotsdam.gf.modules.peer2peerfeedback.DummyFeedback;
+import unipotsdam.gf.modules.researchreport.DummyResearchReportManagement;
+import unipotsdam.gf.modules.researchreport.ResearchReportManagement;
 
 public class GFApplicationBinder extends AbstractBinder {
+
+    /**
+     * TODO replace DummyImplementation
+     */
     @Override
     protected void configure() {
         bind(CommunicationDummyService.class).to(ICommunication.class);
         bind(ManagementImpl.class).to(Management.class);
+        bind(DummyFeedback.class).to(Feedback.class);
+        bind(PeerAssessmentDummy.class).to(IPeerAssessment.class);
+        bind(PhasesImpl.class).to(IPhases.class);
+        bind(ManagementImpl.class).to(Management.class);
+        bind(DummyResearchReportManagement.class).to(ResearchReportManagement.class);
+        bind(TestList.class).to(TestListInterface.class);
+        bind(DummyGroupfinding.class).to(IGroupFinding.class);
+
     }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFRocketChatConfig.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFRocketChatConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..feac0c4e9926ffabdf27fad4ff2c1620d8b0b680
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFRocketChatConfig.java
@@ -0,0 +1,8 @@
+package unipotsdam.gf.config;
+
+public class GFRocketChatConfig {
+
+    public static final String ROCKET_CHAT_LINK = "https://rocket.farm.uni-potsdam.de/";
+    public static final String ADMIN_USERNAME = "";
+    public static final String ADMIN_PASSWORD = "";
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java
index 80ed128cf20fc34528390e98806b166a9495fde7..d5c42e2cceb64410da5b040a276c63c10083d4ee 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java
@@ -1,12 +1,17 @@
 package unipotsdam.gf.core.database.mysql;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import unipotsdam.gf.config.GFDatabaseConfig;
+import unipotsdam.gf.modules.communication.view.CommunicationView;
 
 import java.sql.*;
 import java.util.Date;
 
 public class MysqlConnect {
 
+	private static final Logger log = LoggerFactory.getLogger(MysqlConnect.class);
+
 	public Connection conn = null;
 
 	private static String createConnectionString() {
@@ -41,6 +46,7 @@ public class MysqlConnect {
 				conn.close();
 			}
 		} catch (final SQLException e) {
+			log.error(e.toString());
 			throw new Error("could not close mysql");
 		}
 	}
@@ -56,6 +62,7 @@ public class MysqlConnect {
 			}
 			return ps;
 		} catch (SQLException ex) {
+			log.error(ex.toString());
 			System.out.println(ex);
 		}
 		return null;
@@ -68,6 +75,7 @@ public class MysqlConnect {
 			ResultSet queryResult = ps.executeQuery();
 			return new VereinfachtesResultSet(queryResult);
 		} catch (SQLException ex) {
+			log.error(ex.toString());
 			System.out.println(ex);
 		}
 		return null;
@@ -78,6 +86,7 @@ public class MysqlConnect {
 		try {
 			this.conn.createStatement().execute(statement);
 		} catch (SQLException ex) {
+			log.error(ex.toString());
 			System.out.println(ex);
 		}
 	}
@@ -88,6 +97,7 @@ public class MysqlConnect {
 		try {
 			return ps.executeUpdate();
 		} catch (SQLException ex) {
+			log.error(ex.toString());
 			System.out.println(ex);
 		}
 		return null;
@@ -99,6 +109,8 @@ public class MysqlConnect {
 		try {
 			ps.execute();
 		} catch (SQLException ex) {
+
+			log.error(ex.toString());
 			System.out.println(ex);
 		}
 	}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java
index 73c0b1e608c2ea6dc3821ad703904162908d9577..3c238f6be74199530d2e17a37d65ce7244858bab 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java
@@ -2,6 +2,7 @@ package unipotsdam.gf.core.management;
 
 import unipotsdam.gf.core.management.group.Group;
 import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.project.ProjectConfiguration;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.core.management.user.UserInterests;
 import unipotsdam.gf.core.management.user.UserProfile;
@@ -120,5 +121,9 @@ public interface Management {
     void deleteGroupMember(User groupMember, int groupId);
 
     List<Group> getGroupsByProjectId(String projectId);
+
+    void create(ProjectConfiguration projectConfiguration, Project project);
+
+    ProjectConfiguration getProjectConfiguration(Project project);
 }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
index 8d98b2c0dd607ff3b33a62ec367255863a030214..c86b8aa6d5db95159640747c314b4ba141c0fbae 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java
@@ -4,10 +4,12 @@ import unipotsdam.gf.core.database.mysql.MysqlConnect;
 import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
 import unipotsdam.gf.core.management.group.Group;
 import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.project.ProjectConfiguration;
+import unipotsdam.gf.core.management.project.ProjectConfigurationDAO;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.core.management.user.UserInterests;
 import unipotsdam.gf.core.management.user.UserProfile;
-import unipotsdam.gf.modules.assessment.controller.model.Quiz;
+import unipotsdam.gf.core.states.ProjectPhase;
 import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
 
 import javax.annotation.ManagedBean;
@@ -56,13 +58,15 @@ public class ManagementImpl implements Management {
         UUID uuid = UUID.randomUUID();
         String token = uuid.toString();
 
+
         MysqlConnect connect = new MysqlConnect();
         connect.connect();
         String mysqlRequest =
                 "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, "
-                        + "`adminPassword`, `token`) values (?,?,?,?,?,?,?)";
+                        + "`adminPassword`, `token`, `phase`) values (?,?,?,?,?,?,?,?)";
         connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), project.getPassword(), project.isActive(),
-                project.getTimecreated(), project.getAuthor(), project.getAdminPassword(), token);
+                project.getTimecreated(), project.getAuthor(), project.getAdminPassword(), token, project.getPhase()
+                        == null ? ProjectPhase.CourseCreation : project.getPhase());
         connect.close();
     }
 
@@ -134,11 +138,15 @@ public class ManagementImpl implements Management {
         connect.connect();
         VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId());
         while (!vereinfachtesResultSet.isLast()) {
-            vereinfachtesResultSet.next();
-            User user = getUserFromResultSet(vereinfachtesResultSet);
-            String token = vereinfachtesResultSet.getString("token");
-            user.setToken(token);
-            result.add(user);
+            Boolean next = vereinfachtesResultSet.next();
+            if (next) {
+                User user = getUserFromResultSet(vereinfachtesResultSet);
+                String token = vereinfachtesResultSet.getString("token");
+                user.setToken(token);
+                result.add(user);
+            } else {
+                break;
+            }
         }
         connect.close();
         return result;
@@ -162,6 +170,7 @@ public class ManagementImpl implements Management {
         String author = vereinfachtesResultSet.getString("author");
         String adminPassword = vereinfachtesResultSet.getString("adminpassword");
         String token = vereinfachtesResultSet.getString("token");
+        String phase = vereinfachtesResultSet.getString("phase");
 
         return new Project(id, password, active, timestamp, author, adminPassword, token);
     }
@@ -173,6 +182,7 @@ public class ManagementImpl implements Management {
         // TODO: determine how to get all User
         return new Group(id, new ArrayList<>(), projectId, chatRoomId);
     }
+
     @Override
     public String getUserToken(User user) {
         MysqlConnect connect = new MysqlConnect();
@@ -200,36 +210,13 @@ public class ManagementImpl implements Management {
         return getUserByField("email", email);
     }
 
-    public Quiz getQuizByProjectGroupId(String projectId, String quizId){
-        MysqlConnect connect = new MysqlConnect();
-        connect.connect();
-        String mysqlRequest = "SELECT * FROM quiz where projectId=" + projectId + " , question="+quizId;
-        VereinfachtesResultSet vereinfachtesResultSet =
-                connect.issueSelectStatement(mysqlRequest, "");
-        boolean next = vereinfachtesResultSet.next();
-        String question = "";
-        ArrayList<String> correctAnswers = new ArrayList<String>();
-        ArrayList<String> incorrectAnswers = new ArrayList<String>();
-        String answer = "";
-        Boolean correct = false;
-        String mcType = "";
-        while (next) {
-            mcType = vereinfachtesResultSet.getString("mcType");
-            question = vereinfachtesResultSet.getString("question");
-            answer = vereinfachtesResultSet.getString("answer");
-            correct = vereinfachtesResultSet.getBoolean("correct");
-            if (correct){
-                correctAnswers.add(answer);
-            }else{
-                incorrectAnswers.add(answer);
-            }
-            next = vereinfachtesResultSet.next();
-        }
-        Quiz quiz = new Quiz(mcType,question, correctAnswers, incorrectAnswers);
-        connect.close();
-        return quiz;
-    }
 
+    /**
+     *
+     * @param field
+     * @param value
+     * @return
+     */
     private User getUserByField(String field, String value) {
         MysqlConnect connect = new MysqlConnect();
         connect.connect();
@@ -310,4 +297,16 @@ public class ManagementImpl implements Management {
             return groups;
         }
     }
+
+    @Override
+    public void create(ProjectConfiguration projectConfiguration, Project project) {
+        ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO();
+        projectConfigurationDAO.persistProjectConfiguration(projectConfiguration,project);
+    }
+
+    @Override
+    public ProjectConfiguration getProjectConfiguration(Project project) {
+        ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO();
+        return projectConfigurationDAO.loadProjectConfiguration(project);
+    }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java
index 682b5c40b13472a4bc3369eb7970ddb9bce428fd..2fb7b840289b1b9056c7da73329bb2bbef6de38d 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java
@@ -1,5 +1,7 @@
 package unipotsdam.gf.core.management.project;
 
+import unipotsdam.gf.core.states.ProjectPhase;
+
 import java.sql.Timestamp;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
@@ -16,6 +18,8 @@ public class Project {
     private String author;
     private String adminPassword;
     private String token;
+    // using enum ProjectPhase
+    private String phase;
 
     public Project() {
     }
@@ -26,8 +30,21 @@ public class Project {
         this.active = active;
         this.author = author;
         this.adminPassword = adminPassword;
-
         this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC")));
+        // default starting at course creation if new
+        this.setPhase(ProjectPhase.CourseCreation);
+    }
+
+    public String getPhase() {
+        return phase;
+    }
+
+    /**
+     * setting phase only with enum
+     * @param phase
+     */
+    public void setPhase(ProjectPhase phase) {
+        this.phase = phase.name();
     }
 
     public Project(String id, String password, Boolean active, String author, String adminPassword, String token) {
@@ -105,5 +122,18 @@ public class Project {
         return timecreated;
     }
 
-
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("Project{");
+        sb.append("id='").append(id).append('\'');
+        sb.append(", password='").append(password).append('\'');
+        sb.append(", active=").append(active);
+        sb.append(", timecreated=").append(timecreated);
+        sb.append(", author='").append(author).append('\'');
+        sb.append(", adminPassword='").append(adminPassword).append('\'');
+        sb.append(", token='").append(token).append('\'');
+        sb.append(", phase='").append(phase).append('\'');
+        sb.append('}');
+        return sb.toString();
+    }
 }
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectConfiguration.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..cc66f5634f1f05f969fcd423c24ce9134d21a653
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectConfiguration.java
@@ -0,0 +1,66 @@
+package unipotsdam.gf.core.management.project;
+
+import unipotsdam.gf.core.states.ProjectPhase;
+import unipotsdam.gf.modules.assessment.AssessmentMechanism;
+import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+
+import java.util.HashMap;
+
+// TODO implement
+public class ProjectConfiguration {
+
+    private HashMap<ProjectPhase, Boolean> phasesSelected;
+    private HashMap<Category, Boolean> criteriaSelected;
+    private HashMap<AssessmentMechanism, Boolean> assessmentMechanismSelected;
+    private HashMap<GroupFormationMechanism, Boolean> groupMechanismSelected;
+
+    public ProjectConfiguration(
+            HashMap<ProjectPhase, Boolean> phasesSelected,
+            HashMap<Category, Boolean> criteriaSelected,
+            HashMap<AssessmentMechanism, Boolean> assessmentMechanismSelected,
+            HashMap<GroupFormationMechanism, Boolean> groupMechanismSelected) {
+        this.phasesSelected = phasesSelected;
+        this.criteriaSelected = criteriaSelected;
+        this.assessmentMechanismSelected = assessmentMechanismSelected;
+        this.groupMechanismSelected = groupMechanismSelected;
+    }
+
+    public HashMap<ProjectPhase, Boolean> getPhasesSelected() {
+        return phasesSelected;
+    }
+
+    public void setPhasesSelected(HashMap<ProjectPhase, Boolean> phasesSelected) {
+        this.phasesSelected = phasesSelected;
+    }
+
+    public HashMap<Category, Boolean> getCriteriaSelected() {
+        return criteriaSelected;
+    }
+
+    public void setCriteriaSelected(
+            HashMap<Category, Boolean> criteriaSelected) {
+        this.criteriaSelected = criteriaSelected;
+    }
+
+    public HashMap<AssessmentMechanism, Boolean> getAssessmentMechanismSelected() {
+        return assessmentMechanismSelected;
+    }
+
+    public void setAssessmentMechanismSelected(
+            HashMap<AssessmentMechanism, Boolean> assessmentMechanismSelected) {
+        this.assessmentMechanismSelected = assessmentMechanismSelected;
+    }
+
+
+    public HashMap<GroupFormationMechanism, Boolean> getGroupMechanismSelected() {
+        return groupMechanismSelected;
+    }
+
+    public void setGroupMechanismSelected(
+            HashMap<GroupFormationMechanism, Boolean> groupMechanismSelected) {
+        this.groupMechanismSelected = groupMechanismSelected;
+    }
+
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectConfigurationDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectConfigurationDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a9f147857cc89528fa38a08e85c878b8d474cf3
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/ProjectConfigurationDAO.java
@@ -0,0 +1,128 @@
+package unipotsdam.gf.core.management.project;
+
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.core.states.ProjectPhase;
+import unipotsdam.gf.modules.assessment.AssessmentMechanism;
+import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class ProjectConfigurationDAO {
+
+    /**
+     * @param projectConfiguration
+     */
+    public void persistProjectConfiguration(ProjectConfiguration projectConfiguration, Project project) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+
+        // persist Criteria
+        HashMap<Category, Boolean> criteriaSelected = projectConfiguration.getCriteriaSelected();
+        for (Category category : criteriaSelected.keySet()) {
+            Boolean criteriumSelected = criteriaSelected.get(category);
+            if (criteriumSelected != null && criteriumSelected) {
+                String projectId = project.getId();
+                String categoryName = category.name();
+                String mysqlRequest = "insert INTO categoriesSelected (`projectId`,`categorySelected`) VALUES (?,?)";
+                connect.issueInsertOrDeleteStatement(mysqlRequest, projectId, categoryName );
+            }
+        }
+
+        // persist Phases
+        HashMap<ProjectPhase, Boolean> phasesSelected = projectConfiguration.getPhasesSelected();
+        for (ProjectPhase phase : phasesSelected.keySet()) {
+            Boolean projectPhaseSelected = phasesSelected.get(phase);
+            if (projectPhaseSelected != null && projectPhaseSelected) {
+                String mysqlRequest = "insert INTO phasesSelected (`projectId`,`phaseSelected`) VALUES (?,?)";
+                connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), phase.name());
+            }
+        }
+
+        // persist GroupFinding
+        HashMap<GroupFormationMechanism, Boolean> groupFindingMechanism =
+                projectConfiguration.getGroupMechanismSelected();
+        for (GroupFormationMechanism gfm : groupFindingMechanism.keySet()) {
+            Boolean groupFindingMechanismSelected = groupFindingMechanism.get(gfm);
+            if (groupFindingMechanismSelected != null && groupFindingMechanismSelected) {
+                String mysqlRequest =
+                        "insert INTO groupfindingMechanismSelected (`projectId`,`gfmSelected`) VALUES (?,?)";
+                connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), gfm.name());
+            }
+        }
+
+
+        // persist assessmentMechanismSelected
+        HashMap<AssessmentMechanism, Boolean> assessmentMechanismsSelected =
+                projectConfiguration.getAssessmentMechanismSelected();
+        for (AssessmentMechanism assessmentMechanism : assessmentMechanismsSelected.keySet()) {
+            Boolean asmSelected = assessmentMechanismsSelected.get(assessmentMechanism);
+            if (asmSelected != null && asmSelected) {
+                String mysqlRequest =
+                        "insert INTO assessmentMechanismSelected (`projectId`,`amSelected`) VALUES (?,?)";
+                connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), assessmentMechanism.name());
+            }
+        }
+        connect.close();
+    }
+
+    public ProjectConfiguration loadProjectConfiguration(Project project) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+
+
+        HashMap<ProjectPhase, Boolean> projectPhasesSelected =
+                getSelectionFromTable(connect, ProjectPhase.class, project, "phasesSelected");
+
+        HashMap<Category, Boolean> categorySelected =
+                getSelectionFromTable(connect, Category.class, project, "categoriesSelected");
+
+        HashMap<AssessmentMechanism, Boolean> asmSelected =
+                getSelectionFromTable(connect, AssessmentMechanism.class, project, "assessmentMechanismSelected");
+
+
+        HashMap<GroupFormationMechanism, Boolean> gfmSelected =
+                getSelectionFromTable(connect, GroupFormationMechanism.class, project, "groupfindingMechanismSelected");
+
+        connect.close();
+
+        ProjectConfiguration projectConfiguration = new ProjectConfiguration(projectPhasesSelected, categorySelected,
+                asmSelected,gfmSelected);
+        return projectConfiguration;
+    }
+
+    /**
+     * this looks like magic but it is just a hack loading all the config tables by taking advantage
+     * of the fact that they all have two columns with the second being the selected attribute and the first being the
+     * project id
+     *
+     * @param connect
+     * @param selectionclass
+     * @param project
+     * @param table
+     * @param <T>
+     * @return
+     */
+    private <T extends Enum<T>> HashMap<T, Boolean> getSelectionFromTable(
+            MysqlConnect connect, Class<T> selectionclass, Project project, String table) {
+        // get phasesSelected
+        String id = project.getId();
+        String mysqlRequest = "SELECT * FROM " + table + " where projectId = ?";
+        VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, id);
+        HashMap<T, Boolean> projectPhaseBoolean = new HashMap<>();
+        while (!vereinfachtesResultSet.isLast()) {
+            Boolean next = vereinfachtesResultSet.next();
+            if (next) {
+                String phaseSelected = vereinfachtesResultSet.getObject(2).toString();
+                T phaseSelected1 = Enum.valueOf(selectionclass, phaseSelected);
+                projectPhaseBoolean.put(phaseSelected1, true);
+            } else {
+                break;
+            }
+        }
+        return projectPhaseBoolean;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java
index f5ccb7490771953ed577159aef335bc032e59f00..d08c07de61e40d362e06bfa2ca3fa2f66b0e73c7 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java
@@ -9,11 +9,14 @@ import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.SimpleTagSupport;
 import java.io.IOException;
 
+
+// TODO: please move this to a view package at the top of the hierarchy as this is not part of the user package
 public class Menu extends SimpleTagSupport {
     public void doTag() throws JspException, IOException {
         PageContext pageContext = (PageContext) getJspContext();
         HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
         String token = request.getParameter("token");
+        String projectId = request.getParameter("projectId");
         ManagementImpl management = new ManagementImpl();
         JspWriter out = getJspContext().getOut();
         if (token!=null){
@@ -22,20 +25,20 @@ public class Menu extends SimpleTagSupport {
             if (isStudent){
                 out.println("<div id=\"sidebar-wrapper\">\n" +
                         "        <ul class=\"sidebar-nav\">\n" +
-                        "            <li class=\"sidebar-brand\"><a href=\"overview-student.jsp?token="+token+"\">overview</a></li>\n" +
-                        "            <li><a href=\"profile.jsp?token="+token+"\">Profil</a></li>\n" +
-                        "            <li><a href=\"Quiz.jsp?token="+token+"\">Quizfrage</a></li>\n" +
-                        "            <li><a href=\"eportfolio.jsp?token="+token+"\">ePortfolio</a></li>\n" +
-                        "            <li><a href=\"researchReportTitle.jsp?token="+token+"\">Beitrag</a></li>\n" +
-                        "            <li><a href=\"finalAssessments.jsp?token="+token+"\">Bewertung</a></li>\n" +
+                        "            <li class=\"sidebar-brand\"><a href=\"overview-student.jsp?token="+token+"&projectId="+projectId+"\">overview</a></li>\n" +
+                        "            <li><a href=\"profile.jsp?token="+token+"&projectId="+projectId+"\">Profil</a></li>\n" +
+                        "            <li><a href=\"Quiz.jsp?token="+token+"&projectId="+projectId+"\">Quizfrage</a></li>\n" +
+                        "            <li><a href=\"eportfolio.jsp?token="+token+"&projectId="+projectId+"\">ePortfolio</a></li>\n" +
+                        "            <li><a href=\"researchReportTitle.jsp?token="+token+"&projectId="+projectId+"\">Beitrag</a></li>\n" +
+                        "            <li><a href=\"finalAssessments.jsp?token="+token+"&projectId="+projectId+"\">Bewertung</a></li>\n" +
                         "            <li><a href=\"../index.jsp\">Logout</a></li>\n" +
                         "        </ul>\n" +
                         "    </div>");
             } else {
                 out.println("<div id=\"sidebar-wrapper\">\n" +
                         "        <ul class=\"sidebar-nav\">\n" +
-                        "            <li class=\"sidebar-brand\"><a href=\"overview-docent.jsp?token="+token+"\">overview</a></li>\n" +
-                        "            <li><a href=\"Quiz.jsp?token="+token+"\">Quizfrage</a></li>\n" +
+                        "            <li class=\"sidebar-brand\"><a href=\"overview-docent.jsp?token="+token+"&projectId="+projectId+"\">overview</a></li>\n" +
+                        "            <li><a href=\"Quiz-docent.jsp?token="+token+"&projectId="+projectId+"\">Quizfrage</a></li>\n" +
                         "            <li><a href=\"#\">ePortfolio</a></li>\n" +
                         "            <li><a href=\"#\">Beitrag</a></li>\n" +
                         "            <li><a href=\"#\">Gruppen erstellen</a></li>\n" +
@@ -51,9 +54,14 @@ public class Menu extends SimpleTagSupport {
                     "</div>");
             //in active System this will be the point to redirect to index.jsp, because token is "wrong"
         }
+        if (projectId!=null)
+            out.println("<p id=\"projectId\" hidden>"+projectId+"</p>");
+        User user = management.getUserByToken(token);
+        if (user != null)
+            out.println("<p id=\"user\" hidden>"+user.getName()+"</p>");
 
 
     }
 
 
-};
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java.orig
deleted file mode 100644
index 73d84e8fa40445fffec6c0a31a5523f9fb5e318f..0000000000000000000000000000000000000000
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java.orig
+++ /dev/null
@@ -1,163 +0,0 @@
-package unipotsdam.gf.core.management.user;
-
-import unipotsdam.gf.core.management.ManagementImpl;
-import unipotsdam.gf.interfaces.ICommunication;
-import unipotsdam.gf.modules.communication.service.CommunicationDummyService;
-
-import javax.annotation.ManagedBean;
-import javax.inject.Inject;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-@Path("/user")
-@ManagedBean
-public class UserService {
-
-    @Inject
-    private ICommunication communicationService;
-
-    /**
-     * creates a user with given credentials
-     *
-     * @param name
-     * @param password
-     * @param email
-     * @param isStudent
-     * @return
-     * @throws URISyntaxException
-     */
-    // This method is called if HTML is request
-    @POST
-    @Produces(MediaType.TEXT_HTML)
-    @Path("/create")
-    public Response createUser(@FormParam("name") String name, @FormParam("password") String password,
-                               @FormParam("email") String email, @FormParam("isStudent") String isStudent)
-            throws URISyntaxException {
-
-        ManagementImpl management = new ManagementImpl();
-        User user = new User(name, password, email, isStudent == null);
-        return login(true, user);
-
-    }
-
-    /**
-     * checks if a user exists in order to log him in
-     *
-     * @param name
-     * @param password
-     * @param email
-     * @return
-     * @throws URISyntaxException
-     */
-    // This method is called if HTML is request
-    @POST
-    @Produces(MediaType.TEXT_HTML)
-    @Path("/exists")
-    public Response existsUser(@FormParam("name") String name, @FormParam("password") String password,
-                               @FormParam("email") String email)
-            throws URISyntaxException {
-
-        ManagementImpl management = new ManagementImpl();
-        User user = new User(name, password, email, null);
-        ICommunication iCommunication = new CommunicationDummyService();
-        boolean isLoggedIn = iCommunication.loginUser(user);
-        if (isLoggedIn) {
-            return login(false, user);
-        } else {
-            return loginError();
-        }
-
-
-    }
-
-    /**
-     * if create User is true, the user is created and logged in if he does not exist
-     *
-     * @param createUser
-     * @param user
-     * @return
-     * @throws URISyntaxException
-     */
-    protected Response login(boolean createUser, User user) throws URISyntaxException {
-        ManagementImpl management = new ManagementImpl();
-        if (management.exists(user)) {
-            if (!createUser) {
-<<<<<<< HEAD
-                ManagementImpl m = new ManagementImpl();
-                String token = m.getUserToken(user);
-                user = m.getUser(token);
-=======
-                boolean successfulLogin = communicationService.loginUser(user);
-                management.update(user);
-                if (!successfulLogin) {
-                    return loginError();
-                }
->>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd
-                return redirectToProjectPage(user, management);
-            }
-            String existsUrl = "../register.jsp?userExists=true";
-            return forwardToLocation(existsUrl);
-        } else {
-            if (createUser) {
-                boolean isRegisteredAndLoggedIn = communicationService.registerAndLoginUser(user);
-                if (!isRegisteredAndLoggedIn) {
-                    return registrationError();
-                }
-                management.create(user, null);
-            } else {
-                String existsUrl = "../index.jsp?userExists=false";
-                return forwardToLocation(existsUrl);
-            }
-            ManagementImpl m = new ManagementImpl();
-            String token = m.getUserToken(user);
-            user = m.getUser(token); //todo: write query to get user isStudent
-            return redirectToProjectPage(user, management);
-        }
-    }
-
-    private Response registrationError() throws URISyntaxException {
-        String existsUrl = "../register.jsp?registrationError=true";
-        return forwardToLocation(existsUrl);
-    }
-
-    private Response loginError() throws URISyntaxException {
-        String existsUrl = "../index.jsp?loginError=true";
-        return forwardToLocation(existsUrl);
-    }
-
-    /**
-     * helper function for redirecting to the right project page
-     *
-     * @param user
-     * @param management
-     * @return
-     * @throws URISyntaxException
-     */
-    private Response redirectToProjectPage(User user, ManagementImpl management) throws URISyntaxException {
-        String successUrl;
-        if (user.getStudent() != null && user.getStudent()) {
-            successUrl = "../pages/overview-student.html?token=";
-        } else {
-            successUrl = "../pages/overview-docent.html?token=";
-        }
-        successUrl += management.getUserToken(user);
-        return forwardToLocation(successUrl);
-    }
-
-    /**
-     * * helper function for redirecting to a new page
-     *
-     * @param existsUrl
-     * @return
-     * @throws URISyntaxException
-     */
-    private Response forwardToLocation(String existsUrl) throws URISyntaxException {
-        return Response.seeOther(new URI(existsUrl)).build();
-    }
-}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/headLine.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/headLine.java
new file mode 100644
index 0000000000000000000000000000000000000000..087a26f8dfd29728abc9de226ef1511a26c59c82
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/headLine.java
@@ -0,0 +1,63 @@
+package unipotsdam.gf.core.management.user;
+
+import unipotsdam.gf.core.management.ManagementImpl;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+import java.io.IOException;
+
+public class headLine extends SimpleTagSupport {
+    public void doTag() throws JspException, IOException {
+        PageContext pageContext = (PageContext) getJspContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        String projectId = request.getParameter("projectId");
+        String token = request.getParameter("token");
+        ManagementImpl management = new ManagementImpl();
+        JspWriter out = getJspContext().getOut();
+        User user =  management.getUserByToken(token);
+        Boolean isStudent = user.getStudent();
+        out.println("<div class=\"container-fluid\">\n" +
+                "            <table style=\"width:100%\">\n" +
+                "                <tr>\n" +
+                "                    <td style=\"width:70%\"><h2 id=\"headLineProject\">");
+        if (projectId!=null){
+            out.println(projectId);
+        }else{
+            if (isStudent){
+                out.println("Studentenübersicht "+user.getName());
+            }else{
+                out.println("Dozentenübersicht "+user.getName());
+            }
+
+        }
+        out.println("</h2></td>\n" +
+                "                    <td style=\"width:30%\">\n" +
+                "                        <div align=\"right\" class=\"dropdown\">\n" +
+                "                        <button style=\"right: 50px;margin-top:-4px;\" class=\"btn btn-primary dropdown-toggle\" type=\"button\"\n" +
+                "                                data-toggle=\"dropdown\">\n" +
+                "\n" +
+                "                            <i class=\"glyphicon glyphicon-envelope\"></i>\n" +
+                "                        </button>\n" +
+                "\n" +
+                "                        <ul class=\"dropdown-menu\">\n" +
+                "                            <li><a class=\"viewfeedback\" role=\"button\">Feedback A</a></li>\n" +
+                "                            <li><a class=\"viewfeedback\" role=\"button\">Feedback B</a></li>\n" +
+                "                            <li><a class=\"viewfeedback\" role=\"button\">Feedback C</a></li>\n" +
+                "                        </ul>\n" +
+                "\n" +
+                "                        <a href=\"#\">\n" +
+                "                    <span class=\"glyphicon glyphicon-cog\"\n" +
+                "                          style=\"font-size:29px;margin-right:30px;\"></span>\n" +
+                "                        </a>\n" +
+                "                    </div>\n" +
+                "                    </td>\n" +
+                "                </tr>\n" +
+                "            </table>\n" +
+                "        </div>");
+    }
+
+
+};
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/omniDependencies.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/omniDependencies.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4b3272b2dac3479a79f5271598981a0e04db3d6
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/omniDependencies.java
@@ -0,0 +1,35 @@
+package unipotsdam.gf.core.management.user;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+import java.io.IOException;
+
+public class omniDependencies extends SimpleTagSupport {
+    public void doTag() throws JspException, IOException {
+        PageContext pageContext = (PageContext) getJspContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        String projectId = request.getParameter("projectId");
+        JspWriter out = getJspContext().getOut();
+        out.println("<meta charset=\"utf-8\">\n" +
+                "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n" +
+                "    <title>fltrail</title>\n" +
+                "    <link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css\">\n" +
+                "    <link rel=\"stylesheet\" href=\"../assets/css/styles.css\">\n" +
+                "    <link rel=\"stylesheet\" href=\"../assets/css/footer.css\">\n" +
+                "    <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>\n" +
+                "    <script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js\"></script>\n" +
+                "    <link rel=\"stylesheet\" href=\"../assets/fonts/font-awesome.min.css\">\n" +
+                "    <link rel=\"stylesheet\" href=\"../assets/css/Sidebar-Menu-1.css\">\n" +
+                "    <link rel=\"stylesheet\" href=\"../assets/css/Sidebar-Menu.css\">\n" +
+                "    <script src=\"../assets/js/Sidebar-Menu.js\"></script>\n" +
+                "    <script src=\"../assets/js/utility.js\"></script>\n" +
+                "    <script src=\"../assets/js/footer.js\"></script>\n" +
+                "    <link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.1.0/css/all.css\"\n" +
+                "          integrity=\"sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt\" crossorigin=\"anonymous\">");
+    }
+
+
+};
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/ContextTag.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/ContextTag.java
new file mode 100644
index 0000000000000000000000000000000000000000..741d3eb28a69d4a2ebef9f63b9749e7d8a9204ec
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/ContextTag.java
@@ -0,0 +1,27 @@
+package unipotsdam.gf.core.session;
+
+import unipotsdam.gf.core.management.project.Project;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+import java.io.IOException;
+
+public class ContextTag extends SimpleTagSupport {
+    public void doTag() throws IOException {
+        PageContext pageContext = (PageContext) getJspContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        // sessionID is created with first call and persisted throughout the user's session<
+        JspWriter out = getJspContext().getOut();
+        // lets add some context to the site
+
+        /**
+         * We assume that the project context is added to the session, when a project is selected
+         * in the view, then the project is loaded from db and added via setAttribute like below
+         */
+        GFContext gfContext = (GFContext) request.getSession().getAttribute("gf_context");
+        out.println("<p>project:"+gfContext.getProject().toString()+"</p>");
+
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/GFContext.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/GFContext.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdbac9ae7b6b1171b82063e4d34f320fadf242fd
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/GFContext.java
@@ -0,0 +1,77 @@
+package unipotsdam.gf.core.session;
+
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.core.states.ProjectPhase;
+import unipotsdam.gf.modules.assessment.controller.model.Quiz;
+import unipotsdam.gf.modules.communication.model.chat.ChatRoom;
+
+public class GFContext {
+    Project project;
+    User user;
+    ProjectPhase projectPhase;
+    ChatRoom chatRoom;
+    // could be quizState ....
+    Quiz quiz;
+
+    public GFContext(
+            Project project, User user, ProjectPhase projectPhase, ChatRoom chatRoom, Quiz quiz) {
+        this.project = project;
+        this.user = user;
+        this.projectPhase = projectPhase;
+        this.chatRoom = chatRoom;
+        this.quiz = quiz;
+    }
+
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project project) {
+        this.project = project;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public ProjectPhase getProjectPhase() {
+        return projectPhase;
+    }
+
+    public void setProjectPhase(ProjectPhase projectPhase) {
+        this.projectPhase = projectPhase;
+    }
+
+    public ChatRoom getChatRoom() {
+        return chatRoom;
+    }
+
+    public void setChatRoom(ChatRoom chatRoom) {
+        this.chatRoom = chatRoom;
+    }
+
+    public Quiz getQuiz() {
+        return quiz;
+    }
+
+    public void setQuiz(Quiz quiz) {
+        this.quiz = quiz;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("GFContext{");
+        sb.append("project=").append(project);
+        sb.append(", user=").append(user);
+        sb.append(", projectPhase=").append(projectPhase);
+        sb.append(", chatRoom=").append(chatRoom);
+        sb.append(", quiz=").append(quiz);
+        sb.append('}');
+        return sb.toString();
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/SessionTag.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/SessionTag.java
new file mode 100644
index 0000000000000000000000000000000000000000..eae3f549fe2061b4533e4092dbcd1e0d52632edb
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/session/SessionTag.java
@@ -0,0 +1,51 @@
+package unipotsdam.gf.core.session;
+
+import uk.co.jemos.podam.api.PodamFactory;
+import uk.co.jemos.podam.api.PodamFactoryImpl;
+import unipotsdam.gf.core.management.ManagementImpl;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import javax.servlet.jsp.tagext.SimpleTagSupport;
+import java.io.IOException;
+
+public class SessionTag extends SimpleTagSupport {
+
+    /**
+     * Utility to creaty dummy data for students
+     */
+    PodamFactory factory = new PodamFactoryImpl();
+
+
+    public void doTag() throws IOException {
+        PageContext pageContext = (PageContext) getJspContext();
+        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
+        // sessionID is created with first call and persisted throughout the user's session<
+        JspWriter out = getJspContext().getOut();
+        out.println("<p id=\"sessionId\"> SessionId:"+request.getSession().getId()+"</p>");
+
+        // lets add some context to the site
+
+        /**
+         * We assume that the project context is added to the session, when a project is selected
+         * in the view, then the project is loaded from db and added via setAttribute like below
+         * this is only done here for the purpose of example
+         */
+
+        // create dummy context
+        String context1 = factory.manufacturePojo(GFContext.class).toString();
+        // set dummy context in sessions
+        request.getSession().setAttribute("gf_context", context1);
+
+        // you can update it
+        Project project = factory.manufacturePojo(Project.class);
+        GFContext context2 = (GFContext) request.getSession().getAttribute("gf_context");
+        context2.setProject(project);
+        // updated context set in session
+        request.getSession().setAttribute("gf_context", context2);
+
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bcf8a20fdb75120b33e7dae2b5cba48013ec3d7
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesImpl.java
@@ -0,0 +1,121 @@
+package unipotsdam.gf.core.states;
+
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.interfaces.*;
+import unipotsdam.gf.view.Messages;
+
+import javax.annotation.ManagedBean;
+import javax.annotation.Resource;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * Created by dehne on 31.05.2018.
+ * This class should be used to manage changing the phases in a central location
+ * it has dependencies to most modules, as they are required to check the constraints
+ * when changing between phases
+ */
+@ManagedBean
+public class PhasesImpl implements IPhases {
+
+    private IPeerAssessment iPeerAssessment;
+
+    private Feedback feedback;
+
+    private ICommunication iCommunication;
+
+    private IJournal iJournal;
+
+    public PhasesImpl() {
+    }
+
+    /**
+     * use this if you don't know how dependency injection works
+     * @param iPeerAssessment
+     * @param feedback
+     * @param iCommunication
+     * @param iJournal
+     */
+    @Inject
+    public PhasesImpl(IPeerAssessment iPeerAssessment, Feedback feedback, ICommunication iCommunication, IJournal iJournal) {
+        this.iPeerAssessment = iPeerAssessment;
+        this.feedback = feedback;
+        this.iCommunication = iCommunication;
+        this.iJournal = iJournal;
+    }
+
+    @Override
+    public void endPhase(ProjectPhase currentPhase, Project project) {
+        switch (currentPhase) {
+            case CourseCreation:
+                // saving the state
+                saveState(project,getNextPhase(currentPhase));
+                break;
+            case GroupFormation:
+                // inform users about the formed groups, optionally giving them a hint on what happens next
+                iCommunication.sendMessageToUsers(project, Messages.GroupFormation(project));
+                saveState(project,getNextPhase(currentPhase));
+                break;
+            case DossierFeedback:
+                // check if everybody has uploaded a dossier
+                Boolean feedbacksGiven = feedback.checkFeedbackConstraints(project);
+                if (!feedbacksGiven) {
+                    feedback.assigningMissingFeedbackTasks(project);
+                } else {
+                    // send a message to the users informing them about the start of the new phase
+                    iCommunication.sendMessageToUsers(project, Messages.NewFeedbackTask(project));
+                    saveState(project,getNextPhase(currentPhase));
+                }
+                break;
+            case Execution:
+                // check if the portfolios have been prepared for evaluation (relevant entries selected)
+                Boolean portfoliosReady = iJournal.getPortfoliosForEvaluationPrepared(project);
+                if (portfoliosReady) {
+                    // inform users about the end of the phase
+                    iCommunication.sendMessageToUsers(project, Messages.AssessmentPhaseStarted(project));
+                    saveState(project,getNextPhase(currentPhase));
+                } else {
+                    iJournal.assignMissingPortfolioTasks(project);
+                }
+                break;
+            case Assessment:
+                closeProject();
+                break;
+        }
+    }
+
+    private void closeProject() {
+        // TODO implement
+    }
+
+    ProjectPhase getNextPhase(ProjectPhase projectPhase) {
+        switch (projectPhase) {
+            case CourseCreation:
+                return ProjectPhase.GroupFormation;
+            case GroupFormation:
+                return ProjectPhase.DossierFeedback;
+            case DossierFeedback:
+                return ProjectPhase.Execution;
+            case Execution:
+                return ProjectPhase.Assessment;
+            case Assessment:
+                return ProjectPhase.Projectfinished;
+        }
+        return null;
+    }
+
+    private void saveState(Project project, ProjectPhase currentPhase) {
+        assert project.getId() != null;
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "UPDATE `projects` SET `phase`=? WHERE id=? LIMIT 1";
+        connect.issueUpdateStatement(mysqlRequest, currentPhase.name(), project.getId());
+        connect.close();
+    }
+
+
+    public void setFeedback(Feedback feedback) {
+        this.feedback = feedback;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3ad42205b6ae45070ae70f643a9f6e662757a18
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/PhasesService.java
@@ -0,0 +1,47 @@
+package unipotsdam.gf.core.states;
+
+import unipotsdam.gf.core.management.Management;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.interfaces.IPhases;
+
+import javax.inject.Inject;
+import javax.ws.rs.*;
+import javax.ws.rs.core.MediaType;
+
+/**
+ * REST API for switching phases
+ * In order to look up the possible phases @see unipotsdam.gf.core.states.ProjectPhase
+ */
+@Path("/phases")
+public class PhasesService  {
+
+    @Inject
+    private IPhases phases;
+
+    @Inject
+    private Management management;
+
+    /**
+     * end phase
+     * @param projectPhase
+     * @param projectId
+     */
+    @Path("/{projectPhase}/projects/{projectId}")
+    @POST
+    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+    public void endPhase(@PathParam("projectPhase") String projectPhase, @PathParam("projectId") String projectId) {
+        phases.endPhase(ProjectPhase.valueOf(projectPhase), management.getProjectById(projectId));
+    }
+
+    /**
+     * get current phase
+     * @param projectId
+     * @return
+     */
+    @Path("/{projectPhase}/projects/{projectId}")
+    @GET
+    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
+    public String getCurrentPhase(@PathParam("projectId") String projectId) {
+        return management.getProjectById(projectId).getPhase();
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java
new file mode 100644
index 0000000000000000000000000000000000000000..328b415f28a8379e81258b79eb671e16614e0417
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/states/ProjectPhase.java
@@ -0,0 +1,6 @@
+package unipotsdam.gf.core.states;
+
+public enum ProjectPhase {
+    CourseCreation, GroupFormation, DossierFeedback, Execution, Assessment,
+    Projectfinished;
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/testsandbox/TestList.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/testsandbox/TestList.java
new file mode 100644
index 0000000000000000000000000000000000000000..b97885acab50b9ecb950a89c16fdf3308b91dd31
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/testsandbox/TestList.java
@@ -0,0 +1,6 @@
+package unipotsdam.gf.core.testsandbox;
+
+import java.util.ArrayList;
+
+public class TestList extends ArrayList implements TestListInterface {
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/testsandbox/TestListInterface.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/testsandbox/TestListInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..f541c49860e102e89d727c80d21a9831d0ceb8f5
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/testsandbox/TestListInterface.java
@@ -0,0 +1,4 @@
+package unipotsdam.gf.core.testsandbox;
+
+public interface TestListInterface extends java.util.List {
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java
index 6ba367ce70e0ce14f2492b9dab298d2d284a405d..5f70b51d18b5b423a9e419294622668040fcee19 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java
@@ -1,7 +1,9 @@
 package unipotsdam.gf.interfaces;
+import unipotsdam.gf.core.management.project.Project;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.modules.peer2peerfeedback.Peer2PeerFeedback;
-import java.*;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+
 import java.io.File;
 import java.util.ArrayList;
 
@@ -26,12 +28,12 @@ public interface Feedback {
     /**
      * give Peer2PeerFeedback
      *
-     * @param feedback: The Peer2PeerFeedback as an Object
-     * @param document: The selected document
+     * @param feedback : The Peer2PeerFeedback as an Object
+     * @param document : The selected document
      * @return Send feedback with doc and return true, if the feedback is successfully sended
      */
 
-    Boolean giveFeedback(Peer2PeerFeedback feedback, File document);
+    Boolean giveFeedback(Peer2PeerFeedback feedback, ResearchReport document);
 
     /**
      * show Feedbackhistory
@@ -51,4 +53,28 @@ public interface Feedback {
 
     int countFeedback(User student);
 
+    /**
+     * TODO implement check in DB that everybody has given feedback
+     * @param project
+     * @return
+     */
+    Boolean checkFeedbackConstraints(Project project);
+
+    /**
+     * TODO implement a routine that assigns missing feedback tasks if someone drops out of a course
+     * @param project
+     */
+    void assigningMissingFeedbackTasks(Project project);
+
+    /**
+     * TODO implement: Assigns each student in a project a feedback target
+     */
+    void assignFeedbackTasks();
+
+    /**
+     * TODO implement: Get the research report you have to give feedback to
+     * @param student
+     * @return
+     */
+    ResearchReport getFeedbackTask(User student);
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java
index 12d3d71183ae34966d1e88a04596095c22eadd42..2705893f7f91d50b0052c22d9171aa74de43681c 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java
@@ -1,6 +1,8 @@
 package unipotsdam.gf.interfaces;
 
+import unipotsdam.gf.core.management.project.Project;
 import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.assignments.NotImplementedLogger;
 import unipotsdam.gf.modules.communication.model.Message;
 import unipotsdam.gf.modules.communication.model.chat.ChatMessage;
 import unipotsdam.gf.modules.communication.model.chat.ChatRoom;
@@ -22,7 +24,7 @@ public interface ICommunication {
     List<ChatMessage> getChatHistory(String roomId);
 
 
-    boolean sendMessageToChat(Message message, String roomId);
+    boolean sendMessageToChat(Message message, String roomId) ;
 
     /**
      * endpoint: https://rocket.chat/docs/developer-guides/rest-api/groups/create/
@@ -44,7 +46,7 @@ public interface ICommunication {
      */
     boolean addUserToChatRoom(String roomId, User user);
 
-    boolean removeUserFromChatRoom(User user, String roomId);
+    boolean removeUserFromChatRoom(User user, String roomId) ;
 
     /**
      * endpoint: https://rocket.chat/docs/developer-guides/rest-api/groups/settopic/
@@ -85,4 +87,9 @@ public interface ICommunication {
 
     String getChatRoomLink(String userToken, String projectToken, String groupToken);
 
+    // TODO implement as Email or whatever
+    void sendSingleMessage(Message message, User user);
+
+    // TODO implement as Email or whatever
+    void sendMessageToUsers(Project project, String message);
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICourseCreation.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICourseCreation.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d0b0f5a4e34646e177ce3cf5cd044925c2458f9
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICourseCreation.java
@@ -0,0 +1,4 @@
+package unipotsdam.gf.interfaces;
+
+public interface ICourseCreation {
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IGroupFinding.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IGroupFinding.java
new file mode 100644
index 0000000000000000000000000000000000000000..9b7f67050cf2a080cf0b70e191e35c31176c0622
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IGroupFinding.java
@@ -0,0 +1,36 @@
+package unipotsdam.gf.interfaces;
+
+import unipotsdam.gf.core.management.group.Group;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.assignments.NotImplementedLogger;
+import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
+import unipotsdam.gf.modules.groupfinding.GroupfindingCriteria;
+
+public interface IGroupFinding {
+
+    /**
+     * Select the groupfinding criteria used
+     * @param groupfindingCriteria
+     */
+    void selectGroupfindingCriteria(GroupfindingCriteria groupfindingCriteria);
+
+    /**
+     * Persist the selected manual groups
+     * @param groupComposition
+     */
+    void persistGroups(java.util.List<Group> groupComposition, Project project);
+
+    /**
+     * @param project
+     * @return
+     */
+    java.util.List<Group> getGroups(Project project);
+
+    /**
+     *
+     * @param groupFindingMechanism
+     */
+    void formGroups(GroupFormationMechanism groupFindingMechanism);
+
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java
index 4da8b21c8ed3871d6824944e2f90b1a19315724e..1750b873a33a184cee3e9a1b911ab48ea53c4762 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java
@@ -1,7 +1,17 @@
 package unipotsdam.gf.interfaces;
 
 
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.assignments.NotImplementedLogger;
 import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.EPorfolio;
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+
+import javax.swing.text.html.HTML;
+import java.io.File;
+import java.util.List;
 
 /**
  * Interface for learning journal
@@ -14,6 +24,45 @@ public interface IJournal {
      * @param student StudentIdentifier
      * @return the journal as String (may change)
      */
-    String exportJournal (StudentIdentifier student);
+    String exportJournal (StudentIdentifier student) ;
+
+    /**
+     * check if all students have prepared their portfolios to be evaluated
+     * @return
+     * @param project
+     */
+    Boolean getPortfoliosForEvaluationPrepared(Project project) ;
+
+    /**
+     * find out, who hasn't prepared their portfolio for evaluation and send message or highlight in view
+     * @param project
+     */
+    void assignMissingPortfolioTasks(Project project) ;
+
+    /**
+     * after user has uploaded a journal entry this function is called
+     * @param journalEntry
+     * @param student
+     */
+    void uploadJournalEntry(Journal journalEntry, User student) ;
+
+    /**
+     * persist final portfolio for assessment
+     *
+     * Maybe create a class for the collected portfolio
+     * @param journalEntries
+     * @param finalResearchReport
+     * @param presentation
+     */
+
+    void uploadFinalPortfolio(Project project, List<Journal> journalEntries, ResearchReport finalResearchReport, File
+            presentation, User user) ;
+
+    /**
+     * Gets EPortfolio for assesment
+     * @param project
+     * @return EPortfolio (containing Report, ProjectDescription and Journal)
+     */
 
+    EPorfolio getFinalPortfolioForAssessment(Project project, User user) ;
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java
index e3b65f1474d62074a4cf33b422a11ebda2d478b0..d2109728546943d36eed575156a7af37f5e3309b 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java
@@ -1,9 +1,11 @@
 package unipotsdam.gf.interfaces;
 
+import unipotsdam.gf.modules.assessment.QuizAnswer;
 import unipotsdam.gf.modules.assessment.controller.model.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by dehne on 18.05.2018.
@@ -17,7 +19,7 @@ public interface IPeerAssessment {
      */
     void addAssessmentDataToDB(Assessment assessment);
 
-    Quiz getQuiz(String projectId, String groupId);
+    Quiz getQuiz(String projectId, String groupId, String author);
     /**
      * will return a saved assessment from the DB
      *
@@ -31,7 +33,7 @@ public interface IPeerAssessment {
      *
      * @param studentAndQuiz
      */
-    void createQuiz(StudentAndQuiz studentAndQuiz);
+    void createQuiz(StudentAndQuiz studentAndQuiz) ;
 
     /**
      * calculate grades for everyone in a list.
@@ -40,7 +42,7 @@ public interface IPeerAssessment {
      *
      * @param totalPerformance @return
      */
-    List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance); // calculates marks for every performance and writes it to an array
+    Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance); // calculates marks for every performance and writes it to an array
 
 
     /**
@@ -56,7 +58,7 @@ public interface IPeerAssessment {
      * @param ProjectId
      * @return
      */
-    int meanOfAssessement(String ProjectId);
+    int meanOfAssessment(String ProjectId);
 
     /**
      * returns all quizzes in a project
@@ -71,7 +73,20 @@ public interface IPeerAssessment {
      *
      * @param peerRatings
      * @param projectId
-     * @param groupId
      */
-    void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId);
+    void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId);
+
+    void postContributionRating(StudentIdentifier student,
+                                String fromPeer,
+                                Map<String, Integer> contributionRating);
+
+    /**
+     *
+     * @param questions
+     * @param student
+     */
+    void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student);
+    void deleteQuiz(String quizId);
+
+    Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method);
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java
new file mode 100644
index 0000000000000000000000000000000000000000..976d67d13cdbb82a565b704b9213a8ac6677495e
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPhases.java
@@ -0,0 +1,19 @@
+package unipotsdam.gf.interfaces;
+
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.states.ProjectPhase;
+
+public interface IPhases {
+    /**
+     * switch from one phase to the next
+     * @param projectPhase
+     * @param project
+     */
+    public void endPhase(ProjectPhase projectPhase, Project project);
+
+    /**
+     * the dependency to feedback should be settable externally for test reasons
+     * @param feedback
+     */
+    void setFeedback(Feedback feedback);
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java
index 27abdc4bcc7f9abed957e39b46369e80ed5f3ba9..ce29362c3f10354b41d3802bd945d638e62b52c9 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java
@@ -4,6 +4,7 @@ import unipotsdam.gf.core.database.mysql.MysqlConnect;
 import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
 import unipotsdam.gf.interfaces.IAnnotation;
 import unipotsdam.gf.modules.annotation.model.Annotation;
+import unipotsdam.gf.modules.annotation.model.AnnotationBody;
 import unipotsdam.gf.modules.annotation.model.AnnotationPatchRequest;
 import unipotsdam.gf.modules.annotation.model.AnnotationPostRequest;
 
@@ -26,8 +27,8 @@ public class AnnotationController implements IAnnotation {
         connection.connect();
 
         // build and execute request
-        String request = "INSERT INTO annotations (`id`, `userId`, `targetId`, `body`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?,?,?);";
-        connection.issueInsertOrDeleteStatement(request, uuid, annotationPostRequest.getUserId(), annotationPostRequest.getTargetId(), annotationPostRequest.getBody(), annotationPostRequest.getStartCharacter(), annotationPostRequest.getEndCharacter());
+        String request = "INSERT INTO annotations (`id`, `userToken`, `targetId`, `title`, `comment`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, uuid, annotationPostRequest.getUserToken(), annotationPostRequest.getTargetId(), annotationPostRequest.getBody().getTitle(), annotationPostRequest.getBody().getComment(),annotationPostRequest.getBody().getStartCharacter(), annotationPostRequest.getBody().getEndCharacter());
 
         // close connection
         connection.close();
@@ -47,8 +48,8 @@ public class AnnotationController implements IAnnotation {
         connection.connect();
 
         // build and execute request
-        String request = "UPDATE `annotations` SET `body` = ? WHERE `id` = ?";
-        connection.issueUpdateStatement(request, annotationPatchRequest.getBody(), annotationId);
+        String request = "UPDATE `annotations` SET `title` = ?, `comment` = ? WHERE `id` = ?";
+        connection.issueUpdateStatement(request, annotationPatchRequest.getTitle(), annotationPatchRequest.getComment(), annotationId);
 
         // close connection
         connection.close();
@@ -159,17 +160,27 @@ public class AnnotationController implements IAnnotation {
 
     }
 
+    /**
+     * Build an annotation object from a given result set
+     *
+     * @param rs The result set from a database query
+     * @return A new annotation object
+     */
     private Annotation getAnnotationFromResultSet(VereinfachtesResultSet rs) {
 
         String id = rs.getString("id");
         long timestamp = rs.getTimestamp(2).getTime();
-        int userId = rs.getInt("userId");
+        String userToken = rs.getString("userToken");
         int targetId = rs.getInt("targetId");
-        String body = rs.getString("body");
+
+        // initialize new annotation body
+        String title = rs.getString("title");
+        String comment = rs.getString("comment");
         int startCharacter = rs.getInt("startCharacter");
         int endCharacter = rs.getInt("endCharacter");
+        AnnotationBody body = new AnnotationBody(title, comment, startCharacter, endCharacter);
 
-        return new Annotation(id, timestamp, userId, targetId, body, startCharacter, endCharacter);
+        return new Annotation(id, timestamp, userToken, targetId, body);
 
     }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java
index 725967353f5685e93c53302b7a8a0e799e4ccc12..699ec3eda8ad469fda08b6688311fabb9a17bc5b 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java
@@ -9,21 +9,17 @@ public class Annotation {
     // variables
     private String id;
     private long timestamp;
-    private int userId;
+    private String userToken;
     private int targetId;
-    private String body;
-    private int startCharacter;
-    private int endCharacter;
+    private AnnotationBody body;
 
     // constructor
-    public Annotation(String id, long timestamp, int userId, int targetId, String body, int startCharacter, int endCharacter) {
+    public Annotation(String id, long timestamp, String userToken, int targetId, AnnotationBody body) {
         this.id = id;
         this.timestamp = timestamp;
-        this.userId = userId;
+        this.userToken = userToken;
         this.targetId = targetId;
         this.body = body;
-        this.startCharacter = startCharacter;
-        this.endCharacter = endCharacter;
     }
 
     // methods
@@ -43,12 +39,12 @@ public class Annotation {
         this.timestamp = timestamp;
     }
 
-    public int getUserId() {
-        return userId;
+    public String getUserToken() {
+        return userToken;
     }
 
-    public void setUserId(int userId) {
-        this.userId = userId;
+    public void setUserToken(String userToken) {
+        this.userToken = userToken;
     }
 
     public int getTargetId() {
@@ -59,40 +55,22 @@ public class Annotation {
         this.targetId = targetId;
     }
 
-    public String getBody() {
+    public AnnotationBody getBody() {
         return body;
     }
 
-    public void setBody(String body) {
+    public void setBody(AnnotationBody body) {
         this.body = body;
     }
 
-    public int getStartCharacter() {
-        return startCharacter;
-    }
-
-    public void setStartCharacter(int startCharacter) {
-        this.startCharacter = startCharacter;
-    }
-
-    public int getEndCharacter() {
-        return endCharacter;
-    }
-
-    public void setEndCharacter(int endCharacter) {
-        this.endCharacter = endCharacter;
-    }
-
     @Override
     public String toString() {
         return "Annotation{" +
-                "id=" + id +
+                "id='" + id + '\'' +
                 ", timestamp=" + timestamp +
-                ", userId=" + userId +
+                ", userToken='" + userToken + '\'' +
                 ", targetId=" + targetId +
-                ", body='" + body + '\'' +
-                ", startCharacter=" + startCharacter +
-                ", endCharacter=" + endCharacter +
+                ", body=" + body +
                 '}';
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationBody.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationBody.java
new file mode 100644
index 0000000000000000000000000000000000000000..53c65233d06da04c8792c2f15ee4c39ddebd498b
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationBody.java
@@ -0,0 +1,69 @@
+package unipotsdam.gf.modules.annotation.model;
+
+/**
+ * @author Sven Kästle
+ * skaestle@uni-potsdam.de
+ */
+public class AnnotationBody {
+
+    // variables
+    private String title;
+    private String comment;
+    private int startCharacter;
+    private int endCharacter;
+
+    // constructors
+    public AnnotationBody(String title, String comment, int startCharacter, int endCharacter) {
+        this.title = title;
+        this.comment = comment;
+        this.startCharacter = startCharacter;
+        this.endCharacter = endCharacter;
+    }
+
+    public AnnotationBody() {
+    }
+
+    // methods
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
+    }
+
+    public int getStartCharacter() {
+        return startCharacter;
+    }
+
+    public void setStartCharacter(int startCharacter) {
+        this.startCharacter = startCharacter;
+    }
+
+    public int getEndCharacter() {
+        return endCharacter;
+    }
+
+    public void setEndCharacter(int endCharacter) {
+        this.endCharacter = endCharacter;
+    }
+
+    @Override
+    public String toString() {
+        return "AnnotationBody{" +
+                "title='" + title + '\'' +
+                ", comment='" + comment + '\'' +
+                ", startCharacter=" + startCharacter +
+                ", endCharacter=" + endCharacter +
+                '}';
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationMessage.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..60d895b66b293668f4b505684a46d75ebea88dbe
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationMessage.java
@@ -0,0 +1,58 @@
+package unipotsdam.gf.modules.annotation.model;
+
+public class AnnotationMessage {
+    // variables
+    private String from;
+    private String targetId;
+    private AnnotationMessageType type;
+    private String annotationId;
+
+    public enum AnnotationMessageType {
+        CREATE,
+        DELETE,
+        EDIT
+    }
+
+    // methods
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getTargetId() {
+        return targetId;
+    }
+
+    public void setTargetId(String targetId) {
+        this.targetId = targetId;
+    }
+
+    public AnnotationMessageType getType() {
+        return type;
+    }
+
+    public void setType(AnnotationMessageType type) {
+        this.type = type;
+    }
+
+    public String getAnnotationId() {
+        return annotationId;
+    }
+
+    public void setAnnotationId(String annotationId) {
+        this.annotationId = annotationId;
+    }
+
+    @Override
+    public String toString() {
+        return "AnnotationMessage{" +
+                "from='" + from + '\'' +
+                ", targetId='" + targetId + '\'' +
+                ", type=" + type +
+                ", annotationId='" + annotationId + '\'' +
+                '}';
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java
index c41e294afda5094833771b48bef3c18656c1f283..af5be4da6ad8db3f77ff0bf644392042a3626e5b 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java
@@ -7,28 +7,39 @@ package unipotsdam.gf.modules.annotation.model;
 public class AnnotationPatchRequest {
 
     // variables
-    private String body;
+    private String title;
+    private String comment;
 
     // constructors
-    public AnnotationPatchRequest(String body) {
-        this.body = body;
+    public AnnotationPatchRequest(String title, String comment) {
+        this.title = title;
+        this.comment = comment;
     }
 
     public AnnotationPatchRequest() {}
 
     // methods
-    public String getBody() {
-        return body;
+    public String getTitle() {
+        return title;
     }
 
-    public void setBody(String body) {
-        this.body = body;
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getComment() {
+        return comment;
+    }
+
+    public void setComment(String comment) {
+        this.comment = comment;
     }
 
     @Override
     public String toString() {
         return "AnnotationPatchRequest{" +
-                "body='" + body + '\'' +
+                "title='" + title + '\'' +
+                ", comment='" + comment + '\'' +
                 '}';
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java
index 5459cb5b567c1aa2224642c2ef304007b954ba7e..5dfe6e206f1f014eb3ce88fbc22e401323b2c422 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java
@@ -7,31 +7,27 @@ package unipotsdam.gf.modules.annotation.model;
 public class AnnotationPostRequest {
 
     // variables
-    private int userId;
+    private String userToken;
     private int targetId;
-    private String body;
-    private int startCharacter;
-    private int endCharacter;
+    private AnnotationBody body;
 
     // constructors
-    public AnnotationPostRequest(int userId, int targetId, String body, int startCharacter, int endCharacter) {
-        this.userId = userId;
+    public AnnotationPostRequest(String userToken, int targetId, AnnotationBody body) {
+        this.userToken = userToken;
         this.targetId = targetId;
         this.body = body;
-        this.startCharacter = startCharacter;
-        this.endCharacter = endCharacter;
     }
 
     public AnnotationPostRequest() {
     }
 
     // methods
-    public int getUserId() {
-        return userId;
+    public String getUserToken() {
+        return userToken;
     }
 
-    public void setUserId(int userId) {
-        this.userId = userId;
+    public void setUserToken(String userToken) {
+        this.userToken = userToken;
     }
 
     public int getTargetId() {
@@ -42,38 +38,21 @@ public class AnnotationPostRequest {
         this.targetId = targetId;
     }
 
-    public String getBody() {
+    public AnnotationBody getBody() {
         return body;
     }
 
-    public void setBody(String body) {
+    public void setBody(AnnotationBody body) {
         this.body = body;
     }
 
-    public int getStartCharacter() {
-        return startCharacter;
-    }
-
-    public void setStartCharacter(int startCharacter) {
-        this.startCharacter = startCharacter;
-    }
-
-    public int getEndCharacter() {
-        return endCharacter;
-    }
-
-    public void setEndCharacter(int endCharacter) {
-        this.endCharacter = endCharacter;
-    }
-
     @Override
     public String toString() {
         return "AnnotationPostRequest{" +
-                "userId=" + userId +
+                "userToken='" + userToken + '\'' +
                 ", targetId=" + targetId +
-                ", body='" + body + '\'' +
-                ", startCharacter=" + startCharacter +
-                ", endCharacter=" + endCharacter +
+                ", body=" + body.toString() +
                 '}';
     }
+
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationMessageDecoder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationMessageDecoder.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4b2d83285499611edd4012ec85c8162effa22f5
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationMessageDecoder.java
@@ -0,0 +1,34 @@
+package unipotsdam.gf.modules.annotation.websocket;
+
+import com.google.gson.Gson;
+import unipotsdam.gf.modules.annotation.model.AnnotationMessage;
+
+import javax.websocket.DecodeException;
+import javax.websocket.Decoder;
+import javax.websocket.EndpointConfig;
+
+public class AnnotationMessageDecoder implements Decoder.Text<AnnotationMessage> {
+
+    public static Gson gson = new Gson();
+
+    @Override
+    public AnnotationMessage decode(String s) throws DecodeException {
+        AnnotationMessage annotationMessage = gson.fromJson(s, AnnotationMessage.class);
+        return annotationMessage;
+    }
+
+    @Override
+    public boolean willDecode(String s) {
+        return (null != s);
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+        // todo
+    }
+
+    @Override
+    public void destroy() {
+        // todo
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationMessageEncoder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationMessageEncoder.java
new file mode 100644
index 0000000000000000000000000000000000000000..161055827abf16881c241bdfe30bb59b466848b0
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationMessageEncoder.java
@@ -0,0 +1,29 @@
+package unipotsdam.gf.modules.annotation.websocket;
+
+import com.google.gson.Gson;
+import unipotsdam.gf.modules.annotation.model.AnnotationMessage;
+
+import javax.websocket.EncodeException;
+import javax.websocket.Encoder;
+import javax.websocket.EndpointConfig;
+
+public class AnnotationMessageEncoder implements Encoder.Text<AnnotationMessage> {
+
+    private static Gson gson = new Gson();
+
+    @Override
+    public String encode(AnnotationMessage annotationMessage) throws EncodeException {
+        String json = gson.toJson(annotationMessage);
+        return json;
+    }
+
+    @Override
+    public void init(EndpointConfig endpointConfig) {
+        // todo
+    }
+
+    @Override
+    public void destroy() {
+        // todo
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationWebSocketEndpoint.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationWebSocketEndpoint.java
new file mode 100644
index 0000000000000000000000000000000000000000..29c2d3f61ebc6da8e99be59dfdff206c8e1810b0
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/websocket/AnnotationWebSocketEndpoint.java
@@ -0,0 +1,65 @@
+package unipotsdam.gf.modules.annotation.websocket;
+
+import unipotsdam.gf.modules.annotation.model.AnnotationMessage;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArraySet;
+
+@ServerEndpoint(value = "/ws/annotation/{targetId}", decoders = AnnotationMessageDecoder.class, encoders = AnnotationMessageEncoder.class)
+public class AnnotationWebSocketEndpoint {
+
+    private Session session;
+    private static final Set<AnnotationWebSocketEndpoint> endpoints = new CopyOnWriteArraySet<>();
+    private static HashMap<String, String> targets = new HashMap<>();
+
+    @OnOpen
+    public void onOpen(Session session, @PathParam("targetId") String targetId) throws IOException {
+        // initialize session
+        this.session = session;
+        // save endpoint in set of endpoints
+        endpoints.add(this);
+        // save mapping of session and target id
+        targets.put(session.getId(), targetId);
+    }
+
+    @OnMessage
+    public void onMessage(Session session, AnnotationMessage annotationMessage) throws IOException, EncodeException {
+        annotationMessage.setTargetId(targets.get(session.getId()));
+        annotationMessage.setFrom(session.getId());
+        broadcast(annotationMessage);
+
+    }
+
+    @OnClose
+    public void onClose(Session session) throws IOException {
+        endpoints.remove(this);
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) {
+        // todo
+    }
+
+    private void broadcast(AnnotationMessage annotationMessage) throws IOException, EncodeException {
+        endpoints.forEach(endpoint -> {
+            synchronized (endpoint) {
+                try {
+                    if (targets.get(endpoint.session.getId()).equals(annotationMessage.getTargetId())
+                            && !endpoint.session.getId().equals(annotationMessage.getFrom())) {
+                        System.out.println("Send message to session" + endpoint.session.getId() + " from session " + annotationMessage.getFrom());
+                        endpoint.session.getBasicRemote().sendObject(annotationMessage);
+                    }
+                }
+                catch (IOException | EncodeException e) {
+                    e.printStackTrace();
+                }
+            }
+        });
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentMechanism.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentMechanism.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3692469832c184c21d3f983fb6cd87202c96e05
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentMechanism.java
@@ -0,0 +1,7 @@
+package unipotsdam.gf.modules.assessment;
+
+public enum AssessmentMechanism {
+    AXEL_MECHANISM,
+    CHRISTIAN_MECHANISM,
+    COMBINATIONXY
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/QuizAnswer.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/QuizAnswer.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e94987dbaaa741b8c7da6a15a3c3148743a08f8
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/QuizAnswer.java
@@ -0,0 +1,4 @@
+package unipotsdam.gf.modules.assessment;
+
+public class QuizAnswer {
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java
new file mode 100644
index 0000000000000000000000000000000000000000..2937b2e3766b6fc3a15fd4595e2878d540dea5cd
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Categories.java
@@ -0,0 +1,24 @@
+package unipotsdam.gf.modules.assessment.controller.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class Categories {
+    public static final List<String> workRatingCategories = Collections.unmodifiableList(
+            new ArrayList<String>() {{
+                add("responsibility");
+                add("partOfWork");
+                add("cooperation");
+                add("communication");
+                add("autonomous");
+            }}
+    );
+    public static final List<String> contributionRatingCategories = Collections.unmodifiableList(
+            new ArrayList<String>() {{
+                add("Dossier");
+                add("eJournal");
+                add("research");
+            }}
+    );
+}
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java
index 80d35be34f8e6208f5c436d267e4d6e93b391129..0d29f8ce6322059e0258f708af7cd581d864e436 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java
@@ -1,18 +1,19 @@
 package unipotsdam.gf.modules.assessment.controller.model;
 
 import java.util.Arrays;
+import java.util.Map;
 
 public class PeerRating {
     private String fromPeer;
     private String toPeer;
-    private int[] workRating;
+    private Map workRating;
 
     @Override
     public String toString() {
         return "PeerRating{" +
                 "fromPeer='" + fromPeer + '\'' +
                 ", toPeer='" + toPeer + '\'' +
-                ", workRating=" + Arrays.toString(workRating) +
+                ", workRating=" + workRating +
                 '}';
     }
 
@@ -35,15 +36,15 @@ public class PeerRating {
         this.toPeer = toPeer;
     }
 
-    public int[] getWorkRating() {
+    public Map getWorkRating() {
         return workRating;
     }
 
-    public void setWorkRating(int[] workRating) {
+    public void setWorkRating(Map<String, Number> workRating) {
         this.workRating = workRating;
     }
 
-    public PeerRating(String fromPeer, String toPeer, int[] workRating) {
+    public PeerRating(String fromPeer, String toPeer, Map<String, Number> workRating) {
         this.fromPeer = fromPeer;
         this.toPeer = toPeer;
         this.workRating = workRating;
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java
index 41a74ef307f07b7f2953183ac2f1b18eba61159e..c5bdd8cb17e438fcfc4865cb9e97de9476b7a325 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java
@@ -1,20 +1,22 @@
 package unipotsdam.gf.modules.assessment.controller.model;
 
 import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
 
 public class Performance {
     private StudentIdentifier studentIdentifier;
-    private int[] quizAnswer;
-    private String feedback;
-    private int[] workRating;
+    private List<Integer> quizAnswer;
+    private Map<String, Double> workRating;
+    private Map<String, Double> contributionRating;
 
     public Performance(){}
 
-    public Performance(StudentIdentifier student, int[] quiz, String feedback, int[] workRating) {
+    public Performance(StudentIdentifier student, List<Integer> quiz, Map contributionRating, Map workRating) {
         this.studentIdentifier = student;
         this.quizAnswer = quiz;
-        this.feedback=feedback;
         this.workRating=workRating;
+        this.contributionRating=contributionRating;
 
     }
 
@@ -25,28 +27,24 @@ public class Performance {
     public void setStudentIdentifier(StudentIdentifier studentIdentifier) {
         this.studentIdentifier = studentIdentifier;
     }
+    public Map getContributionRating() { return contributionRating;    }
 
-    public int[] getQuizAnswer() {
-        return quizAnswer;
-    }
+    public void setContributionRating(Map contributionRating) { this.contributionRating = contributionRating;    }
 
-    public void setQuizAnswer(int[] quizAnswer) {
-        this.quizAnswer = quizAnswer;
-    }
 
-    public String getFeedback() {
-        return feedback;
+    public List<Integer> getQuizAnswer() {
+        return quizAnswer;
     }
 
-    public void setFeedback(String feedback) {
-        this.feedback = feedback;
+    public void setQuizAnswer(List<Integer> quizAnswer) {
+        this.quizAnswer = quizAnswer;
     }
 
-    public int[] getWorkRating() {
+    public Map getWorkRating() {
         return workRating;
     }
 
-    public void setWorkRating(int[] workRating) {
+    public void setWorkRating(Map workRating) {
         this.workRating = workRating;
     }
 
@@ -55,9 +53,9 @@ public class Performance {
     public String toString() {
         return "Performance{" +
                 "studentIdentifier=" + studentIdentifier +
-                ", quizAnswer=" + Arrays.toString(quizAnswer) +
-                ", feedback='" + feedback + '\'' +
-                ", workRating=" + Arrays.toString(workRating) +
+                ", quizAnswer=" + quizAnswer +
+                ", contributionRating='" + contributionRating + '\'' +
+                ", workRating=" + workRating +
                 '}';
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java
index 4f5f5c0976bffc1bc51602c7c1cc886f294ac1d5..b995fc294603c2796555cc13b205e3fc6b5a4fc8 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java
@@ -1,6 +1,13 @@
 package unipotsdam.gf.modules.assessment.controller.model;
 
+
+/**
+ * TODO @Axel: Normally a quiz would have a student field property instead of creating a new class
+ */
 public class StudentAndQuiz {
+    private Quiz quiz;
+    private StudentIdentifier studentIdentifier;
+
     @Override
     public String toString() {
         return "StudentAndQuiz{" +
@@ -11,8 +18,6 @@ public class StudentAndQuiz {
 
     public StudentAndQuiz(){}
 
-    private StudentIdentifier studentIdentifier;
-
     public StudentIdentifier getStudentIdentifier() {
         return studentIdentifier;
     }
@@ -29,8 +34,6 @@ public class StudentAndQuiz {
         this.quiz = quiz;
     }
 
-    private Quiz quiz;
-
     public StudentAndQuiz(StudentIdentifier studentIdentifier, Quiz quiz) {
         this.studentIdentifier = studentIdentifier;
         this.quiz = quiz;
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff2d1bdc4eef24c126ac98ffa789fd32ee658154
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/cheatCheckerMethods.java
@@ -0,0 +1,17 @@
+package unipotsdam.gf.modules.assessment.controller.model;
+
+public enum cheatCheckerMethods {
+    variance("variance"),
+    median("median"),
+    none("");
+
+    private final String text;
+
+    cheatCheckerMethods(final String text){
+        this.text = text;
+    }
+    @Override
+    public String toString(){
+        return text;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5e803245536598c1664156205fb56e1067eb4b2
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java
@@ -0,0 +1,175 @@
+package unipotsdam.gf.modules.assessment.controller.service;
+
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.modules.assessment.controller.model.*;
+
+import javax.annotation.ManagedBean;
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@ManagedBean
+@Resource
+@Singleton
+class AssessmentDBCommunication {
+
+    ArrayList<Map<String, Double>> getWorkRating(StudentIdentifier student) {
+        ArrayList<Map<String, Double>> result = new ArrayList<>();
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "SELECT * FROM `workrating` WHERE `projectId`=? AND `studentId`=?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId());
+        boolean next = vereinfachtesResultSet.next();
+        while (next) {
+            Map<String, Double> workRating = new HashMap<>();
+            for (String category : Categories.workRatingCategories) {
+                workRating.put(category, (double) vereinfachtesResultSet.getInt(category));
+            }
+            result.add(workRating);
+            next = vereinfachtesResultSet.next();
+        }
+        return result;
+    }
+
+    List<String> getStudents(String projectID) {
+        List<String> result = new ArrayList<>();
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "SELECT * FROM `projectuser` WHERE `projectId`=?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, projectID);
+        boolean next = vereinfachtesResultSet.next();
+        while (next) {
+            result.add(vereinfachtesResultSet.getString("userID"));
+            next = vereinfachtesResultSet.next();
+        }
+        return result;
+    }
+
+    ArrayList<Map<String, Double>> getContributionRating(StudentIdentifier student) {
+        ArrayList<Map<String, Double>> result = new ArrayList<>();
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "SELECT * FROM `contributionrating` WHERE `projectId`=? AND `studentId`=?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId());
+        boolean next = vereinfachtesResultSet.next();
+        while (next) {
+            Map<String, Double> contributionRating = new HashMap<>();
+            for (String category : Categories.contributionRatingCategories) {
+                contributionRating.put(category, (double) vereinfachtesResultSet.getInt(category));
+            }
+            result.add(contributionRating);
+            next = vereinfachtesResultSet.next();
+        }
+        connect.close();
+        return result;
+    }
+
+    ArrayList<Integer> getAnsweredQuizzes(StudentIdentifier student) {
+        ArrayList<Integer> result = new ArrayList<>();
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "SELECT * FROM `answeredquiz` WHERE `projectId`=? AND `studentId`=?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, student.getProjectId(), student.getStudentId());
+        boolean next = vereinfachtesResultSet.next();
+        while (next) {
+            result.add(vereinfachtesResultSet.getInt("correct"));
+            next = vereinfachtesResultSet.next();
+        }
+        connect.close();
+        return result;
+    }
+
+    void writeAnsweredQuiz(StudentIdentifier student, Map<String, Boolean> questions) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        for (String question: questions.keySet()){
+            String mysqlRequest = "INSERT INTO `answeredquiz`(`projectId`, `studentId`, `question`, `correct`) VALUES (?,?,?,?)";
+            connect.issueInsertOrDeleteStatement(mysqlRequest,
+                    student.getProjectId(),
+                    student.getStudentId(),
+                    question,
+                    questions.get(question)
+            );
+        }
+        connect.close();
+    }
+
+    void writeWorkRatingToDB(StudentIdentifier student, String fromStudent, Map<String, Integer> workRating) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "INSERT INTO `workrating`(`projectId`, `studentId`, `fromPeer`, " +
+                "`responsibility`, " +
+                "`partOfWork`, " +
+                "`cooperation`, " +
+                "`communication`, " +
+                "`autonomous`" +
+                ") VALUES (?,?,?,?,?,?,?,?)";
+        connect.issueInsertOrDeleteStatement(mysqlRequest, student.getProjectId(), student.getStudentId(), fromStudent,
+                workRating.get("responsibility"),
+                workRating.get("partOfWork"),
+                workRating.get("cooperation"),
+                workRating.get("communication"),
+                workRating.get("autonomous")
+        );
+        connect.close();
+    }
+
+    void writeContributionRatingToDB(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "INSERT INTO `contributionrating`(" +
+                "`studentId`, " +
+                "`projectId`, " +
+                "`fromPeer`, " +
+                "`dossier`, " +
+                "`eJournal`, " +
+                "`research`) " +
+                "VALUES (?,?,?,?,?,?)";
+        connect.issueInsertOrDeleteStatement(mysqlRequest,
+                student.getStudentId(),
+                student.getProjectId(),
+                fromStudent,
+                contributionRating.get("dossier"),
+                contributionRating.get("eJournal"),
+                contributionRating.get("research")
+        );
+        connect.close();
+    }
+
+    void writeGradesToDB(Grading grade) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "INSERT INTO `grades`(`projectId`, `studentId`, `grade`) VALUES (?,?,?)";
+        connect.issueInsertOrDeleteStatement(mysqlRequest,
+                grade.getStudentIdentifier().getProjectId(),
+                grade.getStudentIdentifier().getStudentId(),
+                grade.getGrade()
+        );
+        connect.close();
+    }
+
+    public Map<String, Boolean> getAnswers(String projectId, String question) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        Map<String, Boolean> result = new HashMap<>();
+        String mysqlRequest = "SELECT * FROM `quiz` WHERE `projectId`=? AND `question`=?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, projectId, question);
+        boolean next = vereinfachtesResultSet.next();
+        while (next) {
+            result.put(vereinfachtesResultSet.getString("answer"), vereinfachtesResultSet.getBoolean("correct"));
+            next = vereinfachtesResultSet.next();
+        }
+        connect.close();
+        return result;
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java
index df592667c5c569eaaa9f60dd7f6d75f30bc34789..ef9dd768e6d5890a7790156a62a5aa6b44986c30 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java
@@ -1,9 +1,11 @@
 package unipotsdam.gf.modules.assessment.controller.service;
 
+import unipotsdam.gf.modules.assessment.QuizAnswer;
 import unipotsdam.gf.modules.assessment.controller.model.*;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by dehne on 18.05.2018.
@@ -16,7 +18,7 @@ public class FBAssessement extends AssessmentDAO {
     }
 
     @Override
-    public Quiz getQuiz(String projectId, String groupId) {
+    public Quiz getQuiz(String projectId, String groupId, String author) {
         return null;
     }
 
@@ -26,7 +28,7 @@ public class FBAssessement extends AssessmentDAO {
     }
 
     @Override
-    public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) {
+    public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) {
         return null;
     }
 
@@ -44,7 +46,7 @@ public class FBAssessement extends AssessmentDAO {
     }
 
     @Override
-    public int meanOfAssessement(String projectId) {
+    public int meanOfAssessment(String projectId) {
         return 0;
     }
 
@@ -54,7 +56,27 @@ public class FBAssessement extends AssessmentDAO {
     }
 
     @Override
-    public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) {
+    public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) {
 
     }
+
+    @Override
+    public void postContributionRating(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) {
+
+    }
+
+    @Override
+    public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) {
+
+    }
+
+    @Override
+    public void deleteQuiz(String quizId) {
+
+    }
+
+    @Override
+    public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) {
+        return null;
+    }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java
index 9ab276c63b7e61ed7d1fbd121717f3ab1b8f8232..820adb76b897dc5028f45c13e8aba944aa6a09fc 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java
@@ -1,13 +1,11 @@
 package unipotsdam.gf.modules.assessment.controller.service;
 
-import unipotsdam.gf.core.management.ManagementImpl;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.interfaces.IPeerAssessment;
+import unipotsdam.gf.modules.assessment.QuizAnswer;
 import unipotsdam.gf.modules.assessment.controller.model.*;
-import unipotsdam.gf.core.database.mysql.MysqlConnect;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 public class PeerAssessment implements IPeerAssessment {
     @Override
@@ -16,13 +14,13 @@ public class PeerAssessment implements IPeerAssessment {
     }
 
     @Override//returns one quiz
-    public Quiz getQuiz(String projectId, String quizId) {
-        return new ManagementImpl().getQuizByProjectGroupId(projectId,quizId);
+    public Quiz getQuiz(String projectId, String quizId, String author) {
+        return new QuizDBCommunication().getQuizByProjectQuizId(projectId, quizId, author);
     }
 
     @Override //returns all quizzes in the course
     public ArrayList<Quiz> getQuiz(String projectId) {
-        return null;
+        return new QuizDBCommunication().getQuizByProjectId(projectId);
     }
 
     @Override
@@ -32,12 +30,162 @@ public class PeerAssessment implements IPeerAssessment {
 
     @Override
     public void createQuiz(StudentAndQuiz studentAndQuiz) {
+        new QuizDBCommunication().createQuiz(studentAndQuiz.getQuiz(), studentAndQuiz.getStudentIdentifier().getStudentId(), studentAndQuiz.getStudentIdentifier().getProjectId());
+    }
 
+    @Override
+    public void deleteQuiz(String quizId) {
+        new QuizDBCommunication().deleteQuiz(quizId);
     }
 
     @Override
-    public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) {
-        return null;
+    public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) {
+        Map<StudentIdentifier, Double> quizMean = new HashMap<>(quizGrade(totalPerformance));
+        Map<StudentIdentifier, Map<String, Double>> workRating = new HashMap<>();
+        Map<StudentIdentifier, Map<String, Double>> contributionRating = new HashMap<>();
+        for (Performance performance : totalPerformance) {
+            workRating.put(performance.getStudentIdentifier(), performance.getWorkRating());
+            contributionRating.put(performance.getStudentIdentifier(), performance.getContributionRating());
+        }
+        Map<StudentIdentifier, Double> workRateMean = new HashMap<>(mapToGrade(workRating));
+        Map<StudentIdentifier, Double> contributionMean = new HashMap<>(mapToGrade(contributionRating));
+        Map<StudentIdentifier, Double> result = new HashMap<>();
+        for (StudentIdentifier student : quizMean.keySet()) {
+            double grade = (quizMean.get(student) + workRateMean.get(student) + contributionMean.get(student)) * 100 / 3. ;
+            result.put(student, grade);
+        }
+        return result;
+    }
+
+    @Override
+    public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) {
+        ArrayList<Performance> totalPerformance = new ArrayList<>();
+        //get all students in projectID from DB
+        List<String> students = new AssessmentDBCommunication().getStudents(projectId);
+        //for each student
+        for (String student : students) {
+            Performance performance = new Performance();
+            StudentIdentifier studentIdentifier = new StudentIdentifier(projectId, student);
+            List<Integer> answeredQuizzes = new AssessmentDBCommunication().getAnsweredQuizzes(studentIdentifier);
+            ArrayList<Map<String, Double>> workRating = new AssessmentDBCommunication().getWorkRating(studentIdentifier);
+            ArrayList<Map<String, Double>> contributionRating = new AssessmentDBCommunication().getContributionRating(studentIdentifier);
+            performance.setStudentIdentifier(studentIdentifier);
+            performance.setQuizAnswer(answeredQuizzes);
+            performance.setWorkRating(cheatChecker(workRating, cheatCheckerMethods.variance));
+            performance.setContributionRating(cheatChecker(contributionRating, cheatCheckerMethods.variance));
+            totalPerformance.add(performance);
+        }
+        return calculateAssessment(totalPerformance);
+    }
+
+    private Map<StudentIdentifier, Double> quizGrade(ArrayList<Performance> totalPerformance) {
+        double[] allAssessments = new double[totalPerformance.size()];
+        Map<StudentIdentifier, Double> grading = new HashMap<>();
+
+        for (int i = 0; i < totalPerformance.size(); i++) {
+            for (Integer quiz : totalPerformance.get(i).getQuizAnswer()) {
+                allAssessments[i] += quiz;
+            }
+            allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().size();
+        }
+        for (int i = 0; i < totalPerformance.size(); i++) {
+            grading.put(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]);
+        }
+        return grading;
+    }
+
+    private Map<StudentIdentifier, Double> mapToGrade(Map<StudentIdentifier, Map<String, Double>> ratings) {
+        Double allAssessments;
+        Map<StudentIdentifier, Double> grading = new HashMap<>();
+        for (StudentIdentifier student : ratings.keySet()) {
+            if (ratings.get(student) != null){
+                allAssessments = sumOfDimensions(ratings.get(student));
+                Double countDimensions = (double) ratings.get(student).size();
+                grading.put(student, (allAssessments-1) / (countDimensions * 4));
+            }
+            else {
+                grading.put(student, 0.);
+            }
+        }
+        return grading;
+    }
+
+    private Double sumOfDimensions(Map rating) {
+        Double sumOfDimensions = 0.;
+        for (Object o : rating.entrySet()) {
+            HashMap.Entry pair = (HashMap.Entry) o;
+            Double markForDimension = (Double) pair.getValue();
+            sumOfDimensions += markForDimension;
+        }
+        return sumOfDimensions;
+    }
+
+    private Map<String, Double> meanOfWorkRatings(ArrayList<Map<String, Double>> workRatings) {
+        HashMap<String, Double> mean = new HashMap<>();
+        Double size = (double) workRatings.size();
+        for (Object o : workRatings.get(0).entrySet()) {
+            Map.Entry pair = (Map.Entry) o;
+            mean.put((String) pair.getKey(), 0.0);
+        }
+        for (Map<String, Double> rating : workRatings) {
+            for (Object o : rating.entrySet()) {
+                Map.Entry pair = (Map.Entry) o;
+                Double value = (double) pair.getValue();
+                mean.put((String) pair.getKey(), value / size + mean.get(pair.getKey()));
+            }
+        }
+        return mean;
+    }
+
+    private Map<String, Double> cheatChecker(ArrayList<Map<String, Double>> workRatings, cheatCheckerMethods method) {
+        ArrayList<Map<String, Double>> oneExcludedMeans = new ArrayList<>();
+        Map<String, Double> result;
+        if (workRatings.size() > 1) {
+            for (Map rating : workRatings) {
+                ArrayList<Map<String, Double>> possiblyCheating = new ArrayList<>(workRatings);
+                possiblyCheating.remove(rating);
+                oneExcludedMeans.add(meanOfWorkRatings(possiblyCheating));
+            }
+        } else {
+            if (workRatings.size() <1){
+                return null;
+            }
+            oneExcludedMeans.add(meanOfWorkRatings(workRatings));
+        }
+        if (method.equals(cheatCheckerMethods.median)) {
+            workRatings.sort(byMean);
+            result = workRatings.get(workRatings.size() / 2); //in favor of student
+        } else {
+            if (method.equals(cheatCheckerMethods.variance)) {
+                Map<String, Double> meanWorkRating = new HashMap<>(meanOfWorkRatings(oneExcludedMeans));
+                ArrayList<Map<String, Double>> elementwiseDeviation = new ArrayList<>();
+                for (Map<String, Double> rating : oneExcludedMeans) {
+                    HashMap<String, Double> shuttle = new HashMap<>();
+                    for (String key : rating.keySet()) {
+                        Double value = (rating.get(key) - meanWorkRating.get(key)) * (rating.get(key) - meanWorkRating.get(key));
+                        shuttle.put(key, value);
+                    }
+                    elementwiseDeviation.add(shuttle);
+                }
+                Double deviationOld = 0.;
+                Integer key = 0;
+                for (Integer i = 0; i < elementwiseDeviation.size(); i++) {
+                    Double deviationNew = 0.;
+                    for (Double devi : elementwiseDeviation.get(i).values()) {
+                        deviationNew += devi;
+                    }
+                    if (deviationNew > deviationOld) {
+                        deviationOld = deviationNew;
+                        key = i;
+                    }
+                }
+                result = oneExcludedMeans.get(key);  //gets set of rates with highest deviation in data
+                                                    //so without the cheater
+            } else {            //without cheatChecking
+                result = meanOfWorkRatings(workRatings);
+            }
+        }
+        return result;
     }
 
     @Override
@@ -46,14 +194,53 @@ public class PeerAssessment implements IPeerAssessment {
     }
 
     @Override
-    public int meanOfAssessement(String ProjectId) {
+    public int meanOfAssessment(String ProjectId) {
         return 0;
     }
 
 
+    @Override
+    public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) {
+        for (PeerRating peer: peerRatings){
+            StudentIdentifier student = new StudentIdentifier(projectId, peer.getToPeer());
+            new AssessmentDBCommunication().writeWorkRatingToDB(student, peer.getFromPeer(), peer.getWorkRating());
+        }
+    }
 
     @Override
-    public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) {
+    public void postContributionRating(StudentIdentifier student,
+                                       String fromStudent,
+                                       Map<String, Integer> contributionRating) {
+        new AssessmentDBCommunication().writeContributionRatingToDB(student, fromStudent, contributionRating);
+    }
 
+    @Override
+    public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) {
+        for (String question: questions.keySet()){
+            Map<String, Boolean> whatAreAnswers = new AssessmentDBCommunication().getAnswers(student.getProjectId(), question);
+            Map<String, Boolean> wasQuestionAnsweredCorrectly = new HashMap<>();
+            Boolean correct = true;
+            for (String studentAnswer: questions.get(question)){
+                if (!whatAreAnswers.get(studentAnswer)){
+                    correct=false;
+                }
+            }
+            wasQuestionAnsweredCorrectly.put(question, correct);
+            new AssessmentDBCommunication().writeAnsweredQuiz(student, wasQuestionAnsweredCorrectly);
+        }
     }
+
+    private Comparator<Map<String, Double>> byMean = (o1, o2) -> {
+        Double sumOfO1 = 0.;
+        Double sumOfO2 = 0.;
+        for (String key : o1.keySet()) {
+            sumOfO1 += o1.get(key);
+            sumOfO2 += o2.get(key);
+        }
+        if (sumOfO1.equals(sumOfO2)) {
+            return 0;
+        } else {
+            return sumOfO1 > sumOfO2 ? -1 : 1;
+        }
+    };
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java
index 35920c8470ac2a075579c14183cbd7fa89818e52..78291cecd72583f82ec78bc02859cbf36ec4a01b 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java
@@ -1,11 +1,12 @@
 package unipotsdam.gf.modules.assessment.controller.service;
 
+import unipotsdam.gf.assignments.Assignee;
+import unipotsdam.gf.assignments.NotImplementedLogger;
 import unipotsdam.gf.interfaces.IPeerAssessment;
+import unipotsdam.gf.modules.assessment.QuizAnswer;
 import unipotsdam.gf.modules.assessment.controller.model.*;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 public class PeerAssessmentDummy implements IPeerAssessment {
     @Override
@@ -13,9 +14,9 @@ public class PeerAssessmentDummy implements IPeerAssessment {
     }
 
     @Override
-    public Quiz getQuiz(String projectId, String quizId) {
-        ArrayList<String> correctAnswers = new ArrayList<String>();
-        ArrayList<String> incorrectAnswers = new ArrayList<String>();
+    public Quiz getQuiz(String projectId, String quizId, String author) {
+        ArrayList<String> correctAnswers = new ArrayList<>();
+        ArrayList<String> incorrectAnswers = new ArrayList<>();
         Quiz sampleQuiz;
         if (quizId.equals("2")) {
             correctAnswers.add("42");
@@ -38,9 +39,9 @@ public class PeerAssessmentDummy implements IPeerAssessment {
     }
 
     public ArrayList<Quiz> getQuiz(String projectId) {
-        ArrayList<String> correctAnswers = new ArrayList<String>();
-        ArrayList<String> incorrectAnswers = new ArrayList<String>();
-        ArrayList<Quiz> sampleQuiz = new ArrayList<Quiz>();
+        ArrayList<String> correctAnswers = new ArrayList<>();
+        ArrayList<String> incorrectAnswers = new ArrayList<>();
+        ArrayList<Quiz> sampleQuiz = new ArrayList<>();
         correctAnswers.add("42");
         correctAnswers.add("" + projectId + " 24");
         incorrectAnswers.add("a god created creature");
@@ -60,60 +61,103 @@ public class PeerAssessmentDummy implements IPeerAssessment {
 }
 
     @Override
-    public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId, String groupId) {
+    public void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId) {
         int breakpoint = 0; //todo: print an http-answer for the ajax-request to receive
     }
 
+    @Override
+    public void postContributionRating(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) {
+
+    }
+
+    @Override
+    public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) {
+        NotImplementedLogger.logAssignment(Assignee.AXEL, IPeerAssessment.class);
+    }
+
+    @Override
+    public void deleteQuiz(String quizId) {
+
+    }
+
+    @Override
+    public Map<StudentIdentifier, Double> calculateAssessment(String projectId, String method) {
+        return null;
+    }
+
     @Override
     public Assessment getAssessmentDataFromDB(StudentIdentifier student) {
-        int[] quizAnswer = {1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1};
-        int[] workRating = {1, 5, 3, 4, 1, 5, 5};
-        Performance performance = new Performance(student, quizAnswer, "what a nice guy", workRating);
-        Assessment assessment = new Assessment(student, performance);
-        return assessment;
+        List<Integer> quizAnswer = new ArrayList<>();
+        quizAnswer.add(0);
+        quizAnswer.add(1);
+        quizAnswer.add(1);
+        quizAnswer.add(1);
+        quizAnswer.add(0);
+        quizAnswer.add(0);
+        Map workRating = new HashMap<>();
+        Map contributionRating = new HashMap<>();
+        Performance performance = new Performance(student, quizAnswer, contributionRating, workRating);
+        return new Assessment(student, performance);
     }
 
     @Override
     public void createQuiz(StudentAndQuiz studentAndQuiz) {
+        NotImplementedLogger.logAssignment(Assignee.AXEL, PeerAssessmentDummy.class);
     }
 
     @Override
-    public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) {
-        double[] allAssessments = new double[totalPerformance.size()];
-        Grading[] grading = new Grading[totalPerformance.size()];
-
-        for (int i = 0; i < totalPerformance.size(); i++) {
-            for (int j = 0; j < totalPerformance.get(i).getQuizAnswer().length; j++) {
-                allAssessments[i] += totalPerformance.get(i).getQuizAnswer()[j];
-            }
-            allAssessments[i] = allAssessments[i] / totalPerformance.get(i).getQuizAnswer().length;
-        }
-        for (int i = 0; i < totalPerformance.size(); i++) {
-            Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessments[i]);
-            grading[i] = shuttle;
-        }
-        return Arrays.asList(grading);
+    public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) {
+        return null;
     }
 
     @Override
     public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) {
-        StudentIdentifier[] students = new StudentIdentifier[2];
         StudentIdentifier student1 = new StudentIdentifier("gemeinsamForschen", "Haralf");
         StudentIdentifier student2 = new StudentIdentifier("gemeinsamForschen", "Regine");
-        ArrayList<Performance> performances = new ArrayList<Performance>();
-        int[] quiz = {1, 0, 1, 0, 0, 0, 1};
-        int[] quiz2 = {0, 1, 0, 1, 1, 1, 0};
-        int[] work = {5, 4, 3, 2, 1};
-        int[] work2 = {1, 2, 3, 4, 5};
-        Performance performance = new Performance(student1, quiz, "toller dude", work);
-        performances.add(performance);
-        performance = new Performance(student2, quiz2, "tolle dudine", work2);
+        ArrayList<Performance> performances = new ArrayList<>();
+        List<Integer> quiz = new ArrayList<>();
+        quiz.add(0);
+        quiz.add(1);
+        quiz.add(1);
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(0);
+        List<Integer> quiz2 = new ArrayList<>();
+        quiz2.add(0);
+        quiz2.add(1);
+        quiz2.add(1);
+        quiz2.add(1);
+        quiz2.add(0);
+        quiz2.add(0);
+        Map<String, Double> work = new HashMap<>();
+        work.put("responsibility", 1.);
+        work.put("partOfWork", 1.);
+        work.put("cooperation", 1.);
+        work.put("communication", 1.);
+        work.put("autonomous", 1.);
+        Map<String, Double> work2 = new HashMap<>();
+        work2.put("responsibility", 3.);
+        work2.put("partOfWork", 4.);
+        work2.put("cooperation", 5.);
+        work2.put("communication", 3.);
+        work2.put("autonomous", 4.);
+        Map<String, Double> contribution1 = new HashMap<>();
+        contribution1.put("Dossier", 4.);
+        contribution1.put("eJournal", 2.);
+        contribution1.put("research", 4.);
+        Map<String, Double> contribution2 = new HashMap<>();
+        contribution2.put("Dossier", 2.);
+        contribution2.put("eJournal", 3.);
+        contribution2.put("research", 4.);
+        Performance performance = new Performance(student1, quiz, contribution1, work);
         performances.add(performance);
+        Performance performance2 = new Performance(student2, quiz2, contribution2, work2);
+        performances.add(performance2);
         return performances;
     }
 
     @Override
-    public int meanOfAssessement(String ProjectId) {
+    public int meanOfAssessment(String ProjectId) {
         return 0;
     }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bec0a0672821a6f22d342f5dd1390d7340066ac
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/QuizDBCommunication.java
@@ -0,0 +1,125 @@
+package unipotsdam.gf.modules.assessment.controller.service;
+
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.modules.assessment.controller.model.Quiz;
+
+import javax.annotation.ManagedBean;
+import javax.annotation.Resource;
+import javax.inject.Singleton;
+import java.util.ArrayList;
+
+@ManagedBean
+@Resource
+@Singleton
+public class QuizDBCommunication {
+    Quiz getQuizByProjectQuizId(String projectId, String quizId, String author){
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "SELECT * FROM `quiz` WHERE `projectId`=? AND `question`=? AND `author`=?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, projectId,quizId,author);
+        boolean next = vereinfachtesResultSet.next();
+        String question = "";
+        ArrayList<String> correctAnswers = new ArrayList<>();
+        ArrayList<String> incorrectAnswers = new ArrayList<>();
+        String answer;
+        Boolean correct;
+        String mcType = "";
+        while (next) {
+            mcType = vereinfachtesResultSet.getString("mcType");
+            question = vereinfachtesResultSet.getString("question");
+            answer = vereinfachtesResultSet.getString("answer");
+            correct = vereinfachtesResultSet.getBoolean("correct");
+            if (correct){
+                correctAnswers.add(answer);
+            }else{
+                incorrectAnswers.add(answer);
+            }
+            next = vereinfachtesResultSet.next();
+        }
+        Quiz quiz = new Quiz(mcType,question, correctAnswers, incorrectAnswers);
+        connect.close();
+        return quiz;
+    }
+
+    ArrayList<Quiz> getQuizByProjectId(String projectId) {
+        MysqlConnect connect = new MysqlConnect();
+        ArrayList<Quiz> result= new ArrayList<>();
+        connect.connect();
+        String mysqlRequest = "SELECT * FROM quiz where projectId= ?";
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(mysqlRequest, projectId);
+        boolean next = vereinfachtesResultSet.next();
+        String question;
+        ArrayList<String> correctAnswers = new ArrayList<>();
+        ArrayList<String> incorrectAnswers = new ArrayList<>();
+        String answer;
+        String oldQuestion="";
+        Boolean correct;
+        String mcType = "";
+        Quiz quiz;
+        while (next) {
+            mcType = vereinfachtesResultSet.getString("mcType");
+            question = vereinfachtesResultSet.getString("question");
+            answer = vereinfachtesResultSet.getString("answer");
+            correct = vereinfachtesResultSet.getBoolean("correct");
+            if (oldQuestion.equals(question)){
+                if (correct){
+                    correctAnswers.add(answer);
+                }else{
+                    incorrectAnswers.add(answer);
+                }
+            }else{
+                quiz = new Quiz(mcType,oldQuestion, correctAnswers, incorrectAnswers);
+                result.add(quiz);
+                correctAnswers=new ArrayList<>();
+                incorrectAnswers=new ArrayList<>();
+                if (correct){
+                    correctAnswers.add(answer);
+                }else{
+                    incorrectAnswers.add(answer);
+                }
+
+            }
+            oldQuestion = question;
+            next = vereinfachtesResultSet.next();
+        }
+        quiz = new Quiz(mcType,oldQuestion, correctAnswers, incorrectAnswers);
+        result.add(quiz);
+        return result;
+    }
+
+    public void deleteQuiz(String quizId) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mysqlRequest = "DELETE FROM quiz where question = (?)";
+        connect.issueInsertOrDeleteStatement(mysqlRequest, quizId);
+        connect.close();
+    }
+
+    public void createQuiz(Quiz quiz, String author, String projectId) {
+        MysqlConnect connect = new MysqlConnect();
+        connect.connect();
+        String mcType;
+        String question;
+        String answer;
+        ArrayList<String> correctAnswers = quiz.getCorrectAnswers();
+        for (String correctAnswer : correctAnswers) {
+            answer = correctAnswer;
+            mcType = quiz.getType();
+            question = quiz.getQuestion();
+            String mysqlRequest = "INSERT INTO `quiz`(`author`, `projectId`, `question`, `mcType`, `answer`, `correct`) VALUES (?,?,?,?,?,?)";
+            connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, true);
+        }
+        ArrayList<String> incorrectAnswers = quiz.getIncorrectAnswers();
+        for (String incorrectAnswer : incorrectAnswers) {
+            answer = incorrectAnswer;
+            mcType = quiz.getType();
+            question = quiz.getQuestion();
+            String mysqlRequest = "INSERT INTO `quiz`(`author`, `projectId`, `question`, `mcType`, `answer`, `correct`) VALUES (?,?,?,?,?,?)";
+            connect.issueInsertOrDeleteStatement(mysqlRequest, author, projectId, question, mcType, answer, false);
+        }
+        connect.close();
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java
index 4ee52595c40fdc7cc9163884de28199e63f1456e..e41b15a6dda0f0a60aa833c0682112d82e3edc4a 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java
@@ -1,121 +1,197 @@
 package unipotsdam.gf.modules.assessment.controller.view;
 
 import unipotsdam.gf.interfaces.IPeerAssessment;
+import unipotsdam.gf.modules.assessment.QuizAnswer;
 import unipotsdam.gf.modules.assessment.controller.model.*;
 import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment;
-import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @Path("/assessments")
-public class QuizView implements IPeerAssessment {
-    private static IPeerAssessment peer =  new PeerAssessmentDummy();   //TestSubject
-    //private static IPeerAssessment peer =  new PeerAssessment();      //correct DB-conn and stuff
+public class QuizView {
+    //private static IPeerAssessment peer =  new PeerAssessmentDummy();   //TestSubject
+    private static IPeerAssessment peer = new PeerAssessment();      //correct DB-conn and stuff
+
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    @Path("/project/{projectId}/quiz/{quizId}")
-    @Override
-    public Quiz getQuiz(@PathParam("projectId") String projectId, @PathParam("quizId") String quizId) {
-        return peer.getQuiz(projectId, quizId);
-    }  ///////////////////////////////funktioniert wie geplant//////////////////////////////////
+    @Path("/project/{projectId}/quiz/{quizId}/author/{author}")
+    public Quiz getQuiz(@PathParam("projectId") String projectId, @PathParam("quizId") String quizId, @PathParam("author") String author) {
+        try {
+            String question = java.net.URLDecoder.decode(quizId, "UTF-8");
+            return peer.getQuiz(projectId, question, author);
+        } catch (UnsupportedEncodingException e) {
+            throw new AssertionError("UTF-8 is unknown");
+        }
+    }  ///////////////////////////////funktioniert//////////////////////////////////
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/project/{projectId}/quiz")
-    @Override
     public ArrayList<Quiz> getQuiz(@PathParam("projectId") String projectId) {
         return peer.getQuiz(projectId);
     }
+    //////////////////////////////////////////funktioniert///////////////////////////////////////
+
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Path("/peerRating/project/{projectId}")
+    public void postPeerRating(ArrayList<PeerRating> peerRatings, @PathParam("projectId") String projectId) throws IOException {
+        peer.postPeerRating(peerRatings, projectId);
+    }
+
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Path("/contributionRating/projectId/{projectId}/studentId/{studentId}/fromPeer/{fromPeer}")
+    public void postContributionRating(Map<String, Integer> contributionRatings,
+                                       @PathParam("projectId") String projectId,
+                                       @PathParam("studentId") String studentId,
+                                       @PathParam("fromPeer") String fromPeer) throws IOException {
+        StudentIdentifier student = new StudentIdentifier(projectId, studentId);
+        peer.postContributionRating(student, fromPeer, contributionRatings);
+    }
 
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
-    @Path("/peer/project/{projectId}/group/{groupId}")
-    @Override
-    public void postPeerRating(ArrayList<PeerRating> peerRatings,@PathParam("projectId") String projectId, @PathParam("groupId") String groupId){
-        peer.postPeerRating(peerRatings, projectId,groupId);
-        //todo: checkout the POST-variable. should be peerRating but its null atm.
+    @Path("/quizAnswer/projectId/{projectId}/studentId/{studentId}/")
+    public void answerQuiz(Map<String, List<String>> questions, @PathParam("projectId") String projectId, @PathParam("studentId") String studentId) {
+        StudentIdentifier student = new StudentIdentifier(projectId, studentId);
+        peer.answerQuiz(questions, student);
+    }
+
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Path("/quiz/{quizId}")
+    public void deleteQuiz(@PathParam("quizId") String quizId) {
+        try {
+            String question = java.net.URLDecoder.decode(quizId, "UTF-8");
+            peer.deleteQuiz(question);
+        } catch (UnsupportedEncodingException e) {
+            throw new AssertionError("UTF-8 is unknown");
+        }
     }
 
     @POST
     @Produces(MediaType.TEXT_PLAIN)
     @Consumes(MediaType.APPLICATION_JSON)
     @Path("/assessment")
-    @Override
     public void addAssessmentDataToDB(Assessment assessment) {
         peer.addAssessmentDataToDB(assessment);
     }
 
-
-    @Override
-    public Assessment getAssessmentDataFromDB(StudentIdentifier student){
+    private Assessment getAssessmentDataFromDB(StudentIdentifier student) {
         return peer.getAssessmentDataFromDB(student);
     }
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    @Path("/project/{projectId}/student/{studentId}")
-    public Assessment getAssessmentDataFromDB(@PathParam("projectId") String projectId,@PathParam("studentId") String studentId){
+    @Path("/get/project/{projectId}/student/{studentId}")
+    public Assessment getAssessmentDataFromDB(@PathParam("projectId") String projectId, @PathParam("studentId") String studentId) {
         StudentIdentifier student = new StudentIdentifier(projectId, studentId);
         return getAssessmentDataFromDB(student);
-    }  ///////////////////////////////funktioniert wie geplant//////////////////////////////////
+    }  //////////dummy//////////////funktioniert wie geplant//////////////////////////////////
 
 
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/quiz")
-    @Override
     public void createQuiz(StudentAndQuiz studentAndQuiz) {
         peer.createQuiz(studentAndQuiz);
     }
+    ////////////////////////////////funktioniert///////////////////////////////////////////
 
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/calculate")
-    @Override
-    public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) {
+    public Map<StudentIdentifier, Double> calculateAssessment(ArrayList<Performance> totalPerformance) {
         return peer.calculateAssessment(totalPerformance);
     }
+    ////////////////////////funktioniert primitiv/////////todo: nicht als jersey zu nutzen///////////////////////////////
 
     @GET
+    @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
-    @Path("/mean/project/{projectId}")
-    @Override
-    public int meanOfAssessement(@PathParam("projectId") String ProjectId) {
+    @Path("/calculate/projectId/{projectId}/cheatChecker/{method}")
+    public Map<StudentIdentifier, Double> calculateAssessment(@PathParam("projectId") String projectId, @PathParam("method") String method) {
+        return peer.calculateAssessment(projectId, method);
+    }
+
 
-        return peer.meanOfAssessement(ProjectId);
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/mean/project/{projectId}")
+    public int meanOfAssessment(@PathParam("projectId") String ProjectId) {
+        return peer.meanOfAssessment(ProjectId);
     }  ///////////////////////////////return 0//////////////////////////////////
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/total/project/{projectId}/student/{student}")
-    public ArrayList<Performance> getTotalAssessment(@PathParam("projectId") String ProjectId,@PathParam("student") String student){
+    public ArrayList<Performance> getTotalAssessment(@PathParam("projectId") String ProjectId, @PathParam("student") String student) {
         StudentIdentifier studentIdentifier = new StudentIdentifier(ProjectId, student);
         return getTotalAssessment(studentIdentifier);
-    }  ///////////////////////////////funktioniert wie geplant//////////////////////////////////
+    }  //////////dummy/////////////funktioniert wie geplant//////////////////////////////////
 
-    @Override
     public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) {
         return peer.getTotalAssessment(studentIdentifier);
-    }  ///////////////////////////////funktioniert wie geplant//////////////////////////////////
+    }  /////////dummy/////////////funktioniert wie geplant//////////////////////////////////
 
 
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     @Path("/dummy/totalperformance")
     public List<Performance> getTotalAssessment() {
-        ArrayList<Performance> result = new ArrayList<>();
-        StudentIdentifier student = new StudentIdentifier("projekt","student");
-        int[] quiz = {1,0,1,1,1,0};
-        Performance pf = new Performance(student,quiz,"toller dude",quiz);
-        Performance pf2 = new Performance(student,quiz,"super",quiz);
+        List<Performance> result = new ArrayList<>();
+        StudentIdentifier student = new StudentIdentifier("projekt", "student");
+        List<Integer> quiz = new ArrayList<>();
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(1);
+        Map<String, Double> work = new HashMap<>();
+        work.put("responsibility", 1.);
+        work.put("partOfWork", 1.);
+        work.put("cooperation", 1.);
+        work.put("communication", 1.);
+        work.put("autonomous", 1.);
+        Map<String, Double> work2 = new HashMap<>();
+        work2.put("responsibility", 3.);
+        work2.put("partOfWork", 4.);
+        work2.put("cooperation", 5.);
+        work2.put("communication", 3.);
+        work2.put("autonomous", 4.);
+        Map<String, Double> contribution1 = new HashMap<>();
+        contribution1.put("Dossier", 4.);
+        contribution1.put("eJournal", 2.);
+        contribution1.put("research", 4.);
+        Map<String, Double> contribution2 = new HashMap<>();
+        contribution2.put("Dossier", 2.);
+        contribution2.put("eJournal", 3.);
+        contribution2.put("research", 4.);
+        Performance pf = new Performance();
+        pf.setContributionRating(contribution1);
+        pf.setQuizAnswer(quiz);
+        pf.setStudentIdentifier(student);
+        pf.setWorkRating(work);
+        Performance pf2 = new Performance();
+        pf2.setContributionRating(contribution2);
+        pf2.setQuizAnswer(quiz);
+        pf2.setStudentIdentifier(student);
+        pf2.setWorkRating(work2);
         result.add(pf);
         result.add(pf2);
         return result;
-    }  ///////////////////////////////returns what i expect it to return!!!!!//////////////////////////////////
+    }  /////////dummy////////////returns what i expect it to return!!!!!//////////////////////////////////
 
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
index 3d989429228f1c213263794b0df7c741f87507cb..1aa5c32fee0d669a6956d7822e9b084f294c264f 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java
@@ -2,7 +2,10 @@ package unipotsdam.gf.modules.communication.service;
 
 import unipotsdam.gf.config.Constants;
 import unipotsdam.gf.core.management.Management;
+import unipotsdam.gf.core.management.project.Project;
 import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.assignments.Assignee;
+import unipotsdam.gf.assignments.NotImplementedLogger;
 import unipotsdam.gf.interfaces.ICommunication;
 import unipotsdam.gf.modules.communication.model.Message;
 import unipotsdam.gf.modules.communication.model.chat.ChatMessage;
@@ -38,7 +41,8 @@ public class CommunicationDummyService implements ICommunication {
 
     @Override
     public boolean sendMessageToChat(Message message, String roomId) {
-        return true;
+        NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class);
+        return false;
     }
 
     @Override
@@ -51,18 +55,22 @@ public class CommunicationDummyService implements ICommunication {
     }
 
     @Override
-    public boolean addUserToChatRoom(String roomId, User user) {
-        return true;
+    public boolean addUserToChatRoom(String roomId, User user)  {
+        NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, "addUserToChatRoom");
+        return false;
     }
 
     @Override
-    public boolean removeUserFromChatRoom(User user, String roomId) {
-        return true;
+    public boolean removeUserFromChatRoom(User user, String roomId)  {
+        NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, "removing user from chat " +
+                "room");
+        return false;
     }
 
     @Override
     public boolean setChatRoomTopic(String roomId, String topic) {
-        return true;
+        NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, "setting chat room topic");
+        return false;
     }
 
     @Override
@@ -100,6 +108,20 @@ public class CommunicationDummyService implements ICommunication {
         return Constants.ROCKET_CHAT_URL + "/channel/" + channelName + "?layout=embedded";
     }
 
+    @Override
+    public void sendSingleMessage(Message message, User user)  {
+        // TODO implement as email or directed message, popup after login or whatever
+        String message2 = "sending email with message: "+ message.getMessage() + " to: "+ user.getEmail();
+        NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, message2);
+    }
+
+    @Override
+    public void sendMessageToUsers(Project project, String message) {
+        // TODO implement as email or directed message, popup after login or whatever
+        String message2 = "sending email with message: "+ message + " to: "+ project.getId();
+        NotImplementedLogger.logAssignment(Assignee.MARTIN, CommunicationDummyService.class, message2);
+    }
+
     // TODO: remove after done implementing
     // just for postman testing
     public User getUser() {
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/DummyGroupfinding.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/DummyGroupfinding.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7f3f4577a605f80f6f2a3109445834140d28ce1
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/DummyGroupfinding.java
@@ -0,0 +1,34 @@
+package unipotsdam.gf.modules.groupfinding;
+
+import unipotsdam.gf.core.management.group.Group;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.assignments.Assignee;
+import unipotsdam.gf.assignments.NotImplementedLogger;
+import unipotsdam.gf.interfaces.IGroupFinding;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DummyGroupfinding implements IGroupFinding {
+    @Override
+    public void selectGroupfindingCriteria(GroupfindingCriteria groupfindingCriteria)  {
+        NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class);
+    }
+
+    @Override
+    public void persistGroups(
+            List<Group> groupComposition, Project project){
+        NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class);
+    }
+
+    @Override
+    public List<Group> getGroups(Project project) {
+        NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class);
+        return new ArrayList<>();
+    }
+
+    @Override
+    public void formGroups(GroupFormationMechanism groupFindingMechanism) {
+        NotImplementedLogger.logAssignment(Assignee.MIRJAM, IGroupFinding.class);
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupFormationMechanism.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupFormationMechanism.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8addf85f4f9789f9e9d52c705c0308cecbd372f
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupFormationMechanism.java
@@ -0,0 +1,7 @@
+package unipotsdam.gf.modules.groupfinding;
+
+public enum GroupFormationMechanism {
+    Manual,
+    LearningGoalStrategy,
+    UserProfilStrategy
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupfindingCriteria.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupfindingCriteria.java
new file mode 100644
index 0000000000000000000000000000000000000000..39c33ca8191322925f08aae951bbc83d3532f485
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupfindingCriteria.java
@@ -0,0 +1,10 @@
+package unipotsdam.gf.modules.groupfinding;
+
+/**
+ * TODO: implementieren
+ *  - Self efficacy scale
+ *  - Uncertainty tolerance scale
+ *  - Other sources
+ */
+public class GroupfindingCriteria {
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupfindingImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupfindingImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..8987f63c3863e21673bbf067fccced65dbff08ed
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/GroupfindingImpl.java
@@ -0,0 +1,30 @@
+package unipotsdam.gf.modules.groupfinding;
+
+import unipotsdam.gf.core.management.group.Group;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.interfaces.IGroupFinding;
+
+import java.util.List;
+
+public class GroupfindingImpl implements IGroupFinding {
+    @Override
+    public void selectGroupfindingCriteria(GroupfindingCriteria groupfindingCriteria) {
+
+    }
+
+    @Override
+    public void persistGroups(
+            List<Group> groupComposition, Project project) {
+
+    }
+
+    @Override
+    public List<Group> getGroups(Project project) {
+        return null;
+    }
+
+    @Override
+    public void formGroups(GroupFormationMechanism groupFindingMechanism) {
+
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java
similarity index 98%
rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java
rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java
index 23127b12dc29e93f9d76e299c81619229fab16e4..5238e9530cee936020be2d577c172fffaba79e7c 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupfinding/service/GroupCreationService.java
@@ -1,4 +1,4 @@
-package unipotsdam.gf.modules.groupCreation.service;
+package unipotsdam.gf.modules.groupfinding.service;
 
 import unipotsdam.gf.core.management.Management;
 import unipotsdam.gf.core.management.group.Group;
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/DummyJournalImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/DummyJournalImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..50da0c81b96dd2a5501eab940ce84682ac2d72c8
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/DummyJournalImpl.java
@@ -0,0 +1,59 @@
+package unipotsdam.gf.modules.journal;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.assignments.Assignee;
+import unipotsdam.gf.assignments.NotImplementedLogger;
+import unipotsdam.gf.interfaces.IJournal;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.EPorfolio;
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+
+import javax.swing.text.html.HTML;
+import java.io.File;
+import java.util.List;
+
+public class DummyJournalImpl implements IJournal {
+
+
+    private Logger log = LoggerFactory.getLogger(DummyJournalImpl.class);
+
+    @Override
+    public String exportJournal(StudentIdentifier student)  {
+        NotImplementedLogger.logAssignment(Assignee.THOMAS, IJournal.class);
+        return null;
+    }
+
+    @Override
+    public Boolean getPortfoliosForEvaluationPrepared(Project project)  {
+        NotImplementedLogger.logAssignment(Assignee.THOMAS, IJournal.class);
+        return false;
+    }
+
+    @Override
+    public void assignMissingPortfolioTasks(Project project) {
+        NotImplementedLogger.logAssignment(Assignee.THOMAS, IJournal.class);
+    }
+
+    @Override
+    public void uploadJournalEntry(Journal journalEntry, User student) {
+        NotImplementedLogger.logAssignment(Assignee.THOMAS, IJournal.class);
+    }
+
+    @Override
+    public void uploadFinalPortfolio(
+            Project project, List<Journal> journalEntries, ResearchReport finalResearchReport, File presentation,
+            User user)  {
+        NotImplementedLogger.logAssignment(Assignee.THOMAS, IJournal.class);
+    }
+
+    @Override
+    public EPorfolio getFinalPortfolioForAssessment(
+            Project project, User user)  {
+        NotImplementedLogger.logAssignment(Assignee.THOMAS, IJournal.class);
+        return null;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/EPorfolio.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/EPorfolio.java
new file mode 100644
index 0000000000000000000000000000000000000000..1377afb417a9b58a14ef68d4c0524daf2aa63f9a
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/EPorfolio.java
@@ -0,0 +1,63 @@
+package unipotsdam.gf.modules.journal.model;
+
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+
+import java.util.ArrayList;
+
+/**
+ * Class for passing e-portfolio to assessment
+ */
+
+public class EPorfolio {
+
+    StudentIdentifier student;
+    ProjectDescription descrition;
+    ArrayList<Journal> journals;
+    ResearchReport report;
+    //TODO mehr?
+
+
+    public EPorfolio() {
+    }
+
+    public EPorfolio(StudentIdentifier student, ProjectDescription descrition, ArrayList<Journal> journals, ResearchReport report) {
+        this.student = student;
+        this.descrition = descrition;
+        this.journals = journals;
+        this.report = report;
+    }
+
+    public StudentIdentifier getStudent() {
+        return student;
+    }
+
+    public void setStudent(StudentIdentifier student) {
+        this.student = student;
+    }
+
+    public ProjectDescription getDescrition() {
+        return descrition;
+    }
+
+    public void setDescrition(ProjectDescription descrition) {
+        this.descrition = descrition;
+    }
+
+    public ArrayList<Journal> getJournals() {
+        return journals;
+    }
+
+    public void setJournals(ArrayList<Journal> journals) {
+        this.journals = journals;
+    }
+
+    public ResearchReport getReport() {
+        return report;
+    }
+
+    public void setReport(ResearchReport report) {
+        this.report = report;
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Journal.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Journal.java
index 65a17d1fea783d016f0422414d5dbed66ee4b671..499c53d55036a3618d391d74052d0524c1d3be19 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Journal.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Journal.java
@@ -2,47 +2,68 @@ package unipotsdam.gf.modules.journal.model;
 
 
 import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
 
-import static unipotsdam.gf.core.management.utils.MarkdownUtils.convertMarkdownToHtml;
+import java.util.Date;
+
+import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml;
 
 /**
  * Model Class for the learnig journal of the e-portfolio
  */
 public class Journal {
 
-    private long id;
+    private String id;
     private StudentIdentifier studentIdentifier;
-    private String creator;
     private String entryHTML;
     private String entryMD;
     private long timestamp;
     private Visibility visibility;
-    private String category;//TODO enum
+    private Category category;
+    private boolean open;
 
     public Journal() {}
 
-    public Journal(long id, StudentIdentifier studentIdentifier, String entry, long timestamp, Visibility visibility, String category) {
+    public Journal(String id, StudentIdentifier studentIdentifier, String entryMD, Visibility visibility, Category category) {
         this.id = id;
         this.studentIdentifier = studentIdentifier;
-        // TODO setName per StudentID
-        this.entryHTML = convertMarkdownToHtml(entry);
-        this.entryMD = entry;
+        entryHTML = convertMarkdownToHtml(entryMD);
+        this.entryMD = entryMD;
+        this.visibility = visibility;
+        this.category = category;
+        open = true;
+        timestamp = new Date().getTime();
+    }
+
+    public Journal(String id, StudentIdentifier studentIdentifier, String entryMD, long timestamp, Visibility visibility, Category category, boolean open) {
+        this.id = id;
+        this.studentIdentifier = studentIdentifier;
+        entryHTML = convertMarkdownToHtml(entryMD);
+        this.entryMD = entryMD;
         this.timestamp = timestamp;
         this.visibility = visibility;
         this.category = category;
+        this.open = open;
     }
 
-    public void setEntry(String entry){
-        this.entryMD = entry;
-        this.entryHTML = convertMarkdownToHtml(entry);
+    public boolean isOpen() {
+        return open;
+    }
+
+    public void setOpen(boolean open) {
+        this.open = open;
     }
 
+    public void setEntry(String entry){
+        entryMD = entry;
+        entryHTML = convertMarkdownToHtml(entry);
+    }
 
-    public long getId() {
+    public String getId() {
         return id;
     }
 
-    public void setId(long id) {
+    public void setId(String id) {
         this.id = id;
     }
 
@@ -78,40 +99,34 @@ public class Journal {
         this.visibility = visibility;
     }
 
-    public String getCategory() {
+    public Category getCategory() {
         return category;
     }
 
-    public void setCategory(String category) {
+    public void setCategory(Category category) {
         this.category = category;
     }
 
-    public String getCreator() {
-        return creator;
-    }
-
-    public void setCreator(String creator) {
-        this.creator = creator;
-    }
-
-    public String getEntryMD() {
-        return entryMD;
-    }
-
-    public void setEntryMD(String entryMD) {
-        this.entryMD = entryMD;
-    }
-
     @Override
     public String toString() {
         return "Journal{" +
                 "id=" + id +
                 ", studentIdentifier=" + studentIdentifier +
-                ", creator='" + creator + '\'' +
                 ", entryHTML='" + entryHTML + '\'' +
+                ", entryMD='" + entryMD + '\'' +
                 ", timestamp=" + timestamp +
                 ", visibility=" + visibility +
-                ", category='" + category + '\'' +
+                ", category=" + category +
+                ", open=" + open +
                 '}';
     }
+
+    public String getEntryMD() {
+        return entryMD;
+    }
+
+    public void setEntryMD(String entryMD) {
+        this.entryMD = entryMD;
+    }
+
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Link.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Link.java
new file mode 100644
index 0000000000000000000000000000000000000000..2a4b7e63cb02c70f5f58bfe78f519e5d4b2298da
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/Link.java
@@ -0,0 +1,61 @@
+package unipotsdam.gf.modules.journal.model;
+
+public class Link {
+
+    String id;
+    String projectDescription;
+    String name;
+    String link;
+
+    public Link() {
+    }
+
+    public Link(String id, String projectDescription, String name, String link) {
+        this.id = id;
+        this.projectDescription = projectDescription;
+        this.name = name;
+        this.link = link;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getProjectDescription() {
+        return projectDescription;
+    }
+
+    public void setProjectDescription(String projectDescription) {
+        this.projectDescription = projectDescription;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLink() {
+        return link;
+    }
+
+    public void setLink(String link) {
+        this.link = link;
+    }
+
+    @Override
+    public String toString() {
+        return "Link{" +
+                "id='" + id + '\'' +
+                ", projectDescription='" + projectDescription + '\'' +
+                ", name='" + name + '\'' +
+                ", link='" + link + '\'' +
+                '}';
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java
index 7c73443a81d372bfe5bdc2cbc43a67a241e95c43..d1e0558be5e4e8fe473137a497be85416c13c8a9 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/ProjectDescription.java
@@ -1,11 +1,12 @@
 package unipotsdam.gf.modules.journal.model;
 
 import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
 
 import java.util.ArrayList;
 import java.util.Map;
 
-import static unipotsdam.gf.core.management.utils.MarkdownUtils.convertMarkdownToHtml;
+import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml;
 
 /**
  * Model class for the project descriptionHTML of the e portfolio
@@ -13,50 +14,58 @@ import static unipotsdam.gf.core.management.utils.MarkdownUtils.convertMarkdownT
 
 public class ProjectDescription {
 
-    private long id;
-    private String name;
+    private String id;
+    private StudentIdentifier student;
     private String descriptionHTML;
     private String descriptionMD;
     private boolean open;
-    private Project project;
-    private Map<String,String> links;
+    private ArrayList<Link> links;
     private ArrayList<String> group;
     private long timestamp;
 
     public ProjectDescription() {
     }
 
-    public ProjectDescription(long id, String name, String description, Project project, Map<String, String> links, ArrayList<String> group, long timestamp) {
+    public ProjectDescription(String id, String name, String description, String project, ArrayList<Link> links, ArrayList<String> group, long timestamp) {
         this.id = id;
-        this.name = name;
+        this.student = new StudentIdentifier(project,name);
         this.descriptionHTML = convertMarkdownToHtml(description);
         this.descriptionMD =description;
-        this.project = project;
         this.links = links;
         this.group = group;
         this.timestamp = timestamp;
         this.open =true;
     }
+    public ProjectDescription(String id, String name, String description, String project, ArrayList<Link> links, ArrayList<String> group, long timestamp, boolean open) {
+        this.id = id;
+        this.student = new StudentIdentifier(project,name);
+        this.descriptionHTML = convertMarkdownToHtml(description);
+        this.descriptionMD =description;
+        this.links = links;
+        this.group = group;
+        this.timestamp = timestamp;
+        this.open = open;
+    }
 
     public void setDescription (String description){
         this.descriptionMD = description;
         this.descriptionHTML = convertMarkdownToHtml(description);
     }
 
-    public long getId() {
+    public String getId() {
         return id;
     }
 
-    public void setId(long id) {
+    public void setId(String id) {
         this.id = id;
     }
 
-    public String getName() {
-        return name;
+    public StudentIdentifier getStudent() {
+        return student;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public void setStudent(StudentIdentifier student) {
+        this.student = student;
     }
 
     public String getDescriptionHTML() {
@@ -67,19 +76,27 @@ public class ProjectDescription {
         this.descriptionHTML = descriptionHTML;
     }
 
-    public Project getProject() {
-        return project;
+    public String getDescriptionMD() {
+        return descriptionMD;
     }
 
-    public void setProject(Project project) {
-        this.project = project;
+    public void setDescriptionMD(String descriptionMD) {
+        this.descriptionMD = descriptionMD;
     }
 
-    public Map<String, String> getLinks() {
+    public boolean isOpen() {
+        return open;
+    }
+
+    public void setOpen(boolean open) {
+        this.open = open;
+    }
+
+    public ArrayList<Link> getLinks() {
         return links;
     }
 
-    public void setLinks(Map<String, String> links) {
+    public void setLinks(ArrayList<Link> links) {
         this.links = links;
     }
 
@@ -99,32 +116,14 @@ public class ProjectDescription {
         this.timestamp = timestamp;
     }
 
-    public boolean isOpen() {
-        return open;
-    }
-
-    public void setOpen(boolean open) {
-        this.open = open;
-    }
-
-    public String getDescriptionMD() {
-        return descriptionMD;
-    }
-
-    public void setDescriptionMD(String descriptionMD) {
-        this.descriptionMD = descriptionMD;
-    }
-
-
     @Override
     public String toString() {
         return "ProjectDescription{" +
-                "id=" + id +
-                ", name='" + name + '\'' +
+                "id='" + id + '\'' +
+                ", student=" + student +
                 ", descriptionHTML='" + descriptionHTML + '\'' +
                 ", descriptionMD='" + descriptionMD + '\'' +
                 ", open=" + open +
-                ", project=" + project +
                 ", links=" + links +
                 ", group=" + group +
                 ", timestamp=" + timestamp +
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..f9ff960168c8515ae8c188aa2e3d87bb85d74be6
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAO.java
@@ -0,0 +1,25 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.journal.model.JournalFilter;
+
+import java.util.ArrayList;
+
+public interface JournalDAO {
+
+
+    void createJournal(Journal journal);
+
+    void updateJournal(Journal journal);
+
+    void deleteJournal(String id);
+
+    Journal getJournal(String id);
+
+    ArrayList<Journal> getAllByProject(String project);
+
+    ArrayList<Journal> getAllByProjectAndFilter(String project, String student, JournalFilter filter);
+
+    void closeJournal(String id);
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c5ce831a639be436e37f2cbc7dce58bd1eebc34
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/JournalDAOImpl.java
@@ -0,0 +1,188 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.journal.model.JournalFilter;
+import unipotsdam.gf.modules.journal.util.JournalUtils;
+
+import java.util.ArrayList;
+import java.util.UUID;
+
+public class JournalDAOImpl implements JournalDAO {
+
+    @Override
+    public void createJournal(Journal journal) {
+        // create a new id if we found no id.
+        String uuid = UUID.randomUUID().toString();
+        while (JournalUtils.existsId(uuid,"journals")) {
+            uuid = UUID.randomUUID().toString();
+        }
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "INSERT INTO journals (`id`, `author`, `project`, `text`, `visibility`,`category`, `open` ) VALUES (?,?,?,?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, uuid, journal.getStudentIdentifier().getStudentId(),
+                journal.getStudentIdentifier().getProjectId(), journal.getEntryMD(), journal.getVisibility(), journal.getCategory(), true);
+
+        //close connection
+        connection.close();
+
+    }
+
+    @Override
+    public void updateJournal(Journal journal) {
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "UPDATE journals SET text=?, visibility=?, category=? WHERE id = ?";
+        connection.issueUpdateStatement(request, journal.getEntryMD(), journal.getVisibility(), journal.getCategory(), journal.getId());
+
+        //close connection
+        connection.close();
+
+    }
+
+    @Override
+    public void deleteJournal(String id) {
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "DELETE FROM journals WHERE id = ?;";
+        connection.issueInsertOrDeleteStatement(request, id);
+
+        // close connection
+        connection.close();
+
+    }
+
+    @Override
+    public Journal getJournal(String id) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM journals WHERE id = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, id);
+
+        if (rs.next()) {
+
+            // save journal
+            Journal journal = getJournalFromResultSet(rs);
+
+            // close connection
+            connection.close();
+
+            return journal;
+        } else {
+
+            // close connection
+            connection.close();
+
+            return null;
+        }
+    }
+
+    @Override
+    public ArrayList<Journal> getAllByProject(String project) {
+
+        ArrayList<Journal> journals = new ArrayList<>();
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM journals WHERE project= ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, project);
+
+        while (rs.next()) {
+            journals.add(getJournalFromResultSet(rs));
+        }
+
+        // close connection
+        connection.close();
+
+        return journals;
+
+    }
+
+    private ArrayList<Journal> getAllByStudent(String student) {
+
+        ArrayList<Journal> journals = new ArrayList<>();
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM journals WHERE author= ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, student);
+
+        while (rs.next()) {
+            journals.add(getJournalFromResultSet(rs));
+        }
+
+        // close connection
+        connection.close();
+
+        return journals;
+
+    }
+
+    @Override
+    public ArrayList<Journal> getAllByProjectAndFilter(String project, String student, JournalFilter filter) {
+        if (filter == JournalFilter.ALL) {
+            return getAllByProject(project);
+        } else {
+            return getAllByStudent(student);
+        }
+
+    }
+
+    @Override
+    public void closeJournal(String id) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "UPDATE journals SET open=? WHERE id = ?";
+        connection.issueUpdateStatement(request, false, id);
+
+        //close connection
+        connection.close();
+    }
+
+    /**
+     * extracts a journal from VereinfachtesResultSet
+     *
+     * @param rs VereinfachtesResultSet
+     * @return journal
+     */
+    private Journal getJournalFromResultSet(VereinfachtesResultSet rs) {
+
+        String id = rs.getString("id");
+        long timestamp = rs.getTimestamp(2).getTime();
+        String student = rs.getString("author");
+        String project = rs.getString("project");
+        String text = rs.getString("text");
+        String visibility = rs.getString("visibility");
+        String category = rs.getString("category");
+        boolean open = rs.getBoolean("open");
+
+        return new Journal(id, new StudentIdentifier(project, student), text, timestamp, JournalUtils.stringToVisibility(visibility), JournalUtils.stringToCategory(category), open);
+
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/LinkDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/LinkDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..be43ba44bf7706b582fdfdd2f07d460ab94c13bd
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/LinkDAO.java
@@ -0,0 +1,14 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import unipotsdam.gf.modules.journal.model.Link;
+
+import java.util.ArrayList;
+
+public interface LinkDAO {
+
+    void addLink(Link link);
+    void deleteLink(String linkId);
+    Link getLink(String linkId);
+    ArrayList<Link> getAllLinks(String descriptionID);
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/LinkDAOImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/LinkDAOImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..f78a69f71a2db188392b540104f1c1e430785d13
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/LinkDAOImpl.java
@@ -0,0 +1,109 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.modules.journal.model.Link;
+import unipotsdam.gf.modules.journal.util.JournalUtils;
+
+import java.util.ArrayList;
+import java.util.UUID;
+
+public class LinkDAOImpl implements LinkDAO{
+
+    @Override
+    public void addLink(Link link) {
+        // create a new id
+        String uuid = UUID.randomUUID().toString();
+        while (JournalUtils.existsId(uuid,"links")) {
+            uuid = UUID.randomUUID().toString();
+        }
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "INSERT INTO links (`id`, `projecdesription`, `name`, `link`) VALUES (?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, uuid, link.getProjectDescription(),link.getName(),link.getLink());
+
+        //close connection
+        connection.close();
+    }
+
+    @Override
+    public void deleteLink(String linkId) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute requestxam
+        String request = "DELETE FROM links WHERE id = ?;";
+        connection.issueInsertOrDeleteStatement(request, linkId);
+
+        // close connection
+        connection.close();
+
+    }
+
+    @Override
+    public Link getLink(String linkId) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM links WHERE id = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, linkId);
+
+        if (rs.next()) {
+
+            // save journal
+            Link link = getLinkFromResultSet(rs);
+
+            // close connection
+            connection.close();
+
+            return link;
+        } else {
+
+            // close connection
+            connection.close();
+
+            return null;
+        }
+
+    }
+
+    @Override
+    public ArrayList<Link> getAllLinks(String descriptionID) {
+        ArrayList<Link> links = new ArrayList<>();
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM links WHERE projecdesription= ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, descriptionID);
+
+        while (rs.next()) {
+            links.add(getLinkFromResultSet(rs));
+        }
+
+        // close connection
+        connection.close();
+
+        return links;
+
+    }
+
+    private Link getLinkFromResultSet(VereinfachtesResultSet rs) {
+
+        String id = rs.getString("id");
+        String project = rs.getString("projecdesription");
+        String name = rs.getString("name");
+        String link = rs.getString("link");
+        return new Link(id,project,name,link);
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..3137a9fe0be906f35f38e23115190f14b3a0576a
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAO.java
@@ -0,0 +1,15 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.ProjectDescription;
+
+public interface ProjectDescriptionDAO {
+
+    void createDescription(ProjectDescription projectDescription);
+    void updateDescription(ProjectDescription projectDescription);
+    ProjectDescription getDescription(StudentIdentifier projectDescription);
+
+    ProjectDescription getDescription(String id);
+    void deleteDescription(StudentIdentifier projectDescription);
+    void closeDescription(String projectDescriptionId);
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec76a9622ddbc43270f0ffefc0016aed8265bd9b
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/model/dao/ProjectDescriptionDAOImpl.java
@@ -0,0 +1,151 @@
+package unipotsdam.gf.modules.journal.model.dao;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.ProjectDescription;
+import unipotsdam.gf.modules.journal.util.JournalUtils;
+
+import java.util.ArrayList;
+import java.util.UUID;
+
+public class ProjectDescriptionDAOImpl implements ProjectDescriptionDAO {
+
+    private final Logger log = LoggerFactory.getLogger(ProjectDescriptionDAOImpl.class);
+
+
+    @Override
+    public void createDescription(ProjectDescription projectDescription) {
+        // create a new id
+        String uuid = UUID.randomUUID().toString();
+        while (JournalUtils.existsId(uuid,"projectdescription")) {
+            uuid = UUID.randomUUID().toString();
+        }
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "INSERT INTO projectdescription(`id`, `author`, `project`, `text`, `open`) VALUES (?,?,?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, uuid, projectDescription.getStudent().getStudentId(),projectDescription.getStudent().getProjectId(),projectDescription.getDescriptionMD(),true);
+
+        //close connection
+        connection.close();
+
+    }
+
+    @Override
+    public void updateDescription(ProjectDescription projectDescription) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "UPDATE projectdescription SET text=? WHERE id = ?";
+        connection.issueUpdateStatement(request, projectDescription.getDescriptionMD(), projectDescription.getId());
+
+        //close connection
+        connection.close();
+    }
+
+    @Override
+    public ProjectDescription getDescription(StudentIdentifier studentIdentifier) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM projectdescription WHERE author = ? AND project = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, studentIdentifier.getStudentId(),studentIdentifier.getProjectId());
+
+        if (rs != null && rs.next()) {
+
+            // save journal
+            ProjectDescription description = getDescriptionFromResultSet(rs);
+
+            // close connection
+            connection.close();
+
+            return description;
+        } else {
+
+            // close connection
+            connection.close();
+
+            return null;
+        }
+    }
+
+    @Override
+    public ProjectDescription getDescription(String id) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "SELECT * FROM projectdescription WHERE id = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, id);
+
+        if (rs != null && rs.next()) {
+
+            // save journal
+            ProjectDescription description = getDescriptionFromResultSet(rs);
+
+            // close connection
+            connection.close();
+
+            return description;
+        } else {
+
+            // close connection
+            connection.close();
+
+            return null;
+        }
+    }
+
+    @Override
+    public void deleteDescription(StudentIdentifier studentIdentifier) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "DELETE FROM projectdescription WHERE WHERE author = ? AND project = ?;";
+        connection.issueInsertOrDeleteStatement(request, studentIdentifier.getStudentId(),studentIdentifier.getProjectId());
+
+        // close connection
+        connection.close();
+
+
+    }
+
+    @Override
+    public void closeDescription(String id) {
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        String request = "UPDATE projectdescription SET open=? WHERE id = ?";
+        connection.issueUpdateStatement(request, false, id);
+
+        //close connection
+        connection.close();
+    }
+
+    private ProjectDescription getDescriptionFromResultSet(VereinfachtesResultSet rs) {
+        String id = rs.getString("id");
+        long timestamp = rs.getTimestamp(2).getTime();
+        String author = rs.getString("author");
+        String project = rs.getString("project");
+        String text = rs.getString("text");
+        boolean open = rs.getBoolean("open");
+
+        return new ProjectDescription(id,author,text,project,new ArrayList<>(),new ArrayList<>(),timestamp, open);
+    }
+
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/DummyJournalService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/DummyJournalService.java
deleted file mode 100644
index d005bbd9dd17092bd316eea835c49ce5f8c66661..0000000000000000000000000000000000000000
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/DummyJournalService.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package unipotsdam.gf.modules.journal.service;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
-import unipotsdam.gf.modules.journal.model.Journal;
-import unipotsdam.gf.modules.journal.model.JournalFilter;
-import unipotsdam.gf.modules.journal.model.Visibility;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-
-/**
- * Service Implementation to test rest, no Database operations
- */
-
-public class DummyJournalService implements JournalService {
-
-    private Logger log = LoggerFactory.getLogger(DummyJournalService.class);
-
-
-    private Calendar cal = Calendar.getInstance();
-
-    private long id = 4;
-
-    private ArrayList<Journal> journals = new ArrayList<>();
-
-    public DummyJournalService(){
-
-        resetList();
-    }
-
-    @Override
-    public Journal getJournal(String id) {
-        for (Journal j : journals) {
-            if(j.getId() == Long.valueOf(id)){
-                return j;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public ArrayList<Journal> getAllJournals(String student, String project, JournalFilter filter) {
-        log.debug(">> get all journals(" + student  + "," + project + ","  + filter + ")");
-
-        ArrayList<Journal> result = new ArrayList<>();
-
-        for (Journal j: journals) {
-
-            //always show own Journals
-            if(j.getStudentIdentifier().getStudentId().equals(student)){
-                result.add(j);
-            }else{
-
-                // if Visibility All, show if Filter allows it
-                if (j.getVisibility() == Visibility.ALL && filter==JournalFilter.ALL){
-                    result.add(j);
-                }
-
-                //If Visibility Group, show if student is in group and filter allows it
-                //TODO: project != Group, for testing ok, change for real Service
-                if (j.getVisibility()== Visibility.GROUP && j.getStudentIdentifier().getProjectId().equals(project) && filter == JournalFilter.ALL){
-                    result.add(j);
-                }
-
-                //TODO if Dozent
-            }
-
-        }
-        log.debug("<< get all journals(" + student , "," + project + ")");
-
-        return result;
-    }
-
-    @Override
-    public ArrayList<Journal> getAllJournals(String student, String project) {
-        return getAllJournals(student,project,JournalFilter.ALL);
-     }
-
-    @Override
-    public boolean saveJournal(long id, String student, String project, String text, String visibility, String category) {
-        if (id == -1){
-
-            StudentIdentifier studentId = new StudentIdentifier(student,project);
-            journals.add(new Journal(this.id++, studentId, text , cal.getTimeInMillis(), stringToVisibility(visibility) , category));
-
-        } else {
-            for (Journal j : journals){
-                if(j.getId() == id){
-                    j.setEntry(text);
-                    j.setVisibility(stringToVisibility(visibility));
-                    j.setCategory(category);
-                }
-            }
-            resetList();
-        }
-        return true;
-    }
-
-    @Override
-    public boolean deleteJournal(long id) {
-        for (Journal j : journals) {
-            if (j.getId() == id) {
-                journals.remove(j);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void closeJournal(String journal) {
-
-    }
-
-    private Visibility stringToVisibility(String visibility) {
-        // If String does not match enum IllegalArgumentException
-        Visibility v ;
-        try{
-            v = Visibility.valueOf(visibility);
-        }catch (IllegalArgumentException e){
-            v = Visibility.MINE;
-            log.debug("Illegal argument for visibility, default to MINE");
-        }
-        return v;
-    }
-
-    private void resetList() {
-
-        StudentIdentifier studentIdentifier = new StudentIdentifier("0","0");
-        StudentIdentifier studentIdentifier2 = new StudentIdentifier("0","1");
-
-        String test = "**nec** nec facilisis nibh, sed sagittis tortor. Suspendisse vel felis ac leo dignissim efficitur. Nunc non egestas eros, sit amet vestibulum nunc. Sed bibendum varius molestie. Proin augue mauris, mollis sed efficitur efficitur, sagittis quis eros. Praesent tincidunt tincidunt porttitor. Maecenas quis ornare tellus. Nunc euismod vestibulum neque, sed luctus neque convallis in. Duis molestie ex ut nunc dignissim condimentum ut vitae dui. Vestibulum diam lorem, eleifend sit amet lobortis nec, vulputate a leo. In nec ante felis. Maecenas interdum nunc et odio placerat fringilla. Aenean felis purus, mollis id lectus non, fringilla tincidunt mi. Nunc sed rutrum ex, vel tempus odio.";
-
-        Journal j1 = new Journal(0,studentIdentifier,test, cal.getTimeInMillis() , Visibility.ALL, "Recherche");
-        j1.setCreator("Test Test");
-        Journal j2 = new Journal(1,studentIdentifier,test, cal.getTimeInMillis() , Visibility.MINE, "Untersuchungskonzept");
-        j2.setCreator("Test Test");
-        Journal j3 = new Journal(2,studentIdentifier,test, cal.getTimeInMillis() , Visibility.GROUP, "Methodik");
-        j3.setCreator("Test Test");
-        Journal j4 = new Journal(3,studentIdentifier,test, cal.getTimeInMillis() , Visibility.DOZENT ,"Recherche");
-        j4.setCreator("Test Test");
-        Journal j5 = new Journal(4,studentIdentifier2,test, cal.getTimeInMillis() , Visibility.GROUP, "Durchführung");
-        j5.setCreator("ASD DSA");
-
-        journals = new ArrayList<>();
-
-        journals.add(j1);
-        journals.add(j2);
-        journals.add(j3);
-        journals.add(j4);
-        journals.add(j5);
-
-    }
-
-
-
-}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/DummyProjectDescription.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/DummyProjectDescription.java
deleted file mode 100644
index 83d23f00d26a72cadeaecbd95f3b68d9d6d83704..0000000000000000000000000000000000000000
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/DummyProjectDescription.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package unipotsdam.gf.modules.journal.service;
-
-import unipotsdam.gf.core.management.project.Project;
-import unipotsdam.gf.modules.journal.model.ProjectDescription;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-
-public class DummyProjectDescription implements ProjectDescriptionService {
-
-    private ProjectDescription testProject;
-
-    public DummyProjectDescription(){
-
-        HashMap<String,String> link = new HashMap<>();
-        link.put("Test", "www.test.de");
-        link.put("Google", "www.google.de");
-
-        ArrayList<String> group = new ArrayList<>();
-        group.add("Test Person");
-        group.add("Person Test");
-
-        String desc = " *Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet* \n" +
-                "\n" +
-                "**Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.** \n" +
-                "\n" +
-                "![Bild](https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/FuBK_testcard_vectorized.svg/2000px-FuBK_testcard_vectorized.svg.png)\n" +
-                "\n" +
-                "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. \n" +
-                "\n" +
-                "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. ";
-
-        testProject = new ProjectDescription(0,"Eine kreative Ãœberschrift",desc, new Project(), link, group, new Date().getTime());
-    }
-
-
-    @Override
-    public ProjectDescription getProject(String project) {
-        return testProject;
-    }
-
-    @Override
-    public void saveProjectText(String text) {
-        testProject.setDescription(text);
-    }
-
-    @Override
-    public void addLink(String link, String name) {
-        //convert String to List
-        //setLinks
-    }
-
-    @Override
-    public void deleteLink(String link) {
-
-    }
-
-    @Override
-    public void closeDescription(String desc) {
-
-    }
-}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/IJournalImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/IJournalImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..15ca144ac8807f6b12522242395d571b0118e99e
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/IJournalImpl.java
@@ -0,0 +1,69 @@
+package unipotsdam.gf.modules.journal.service;
+
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.interfaces.IJournal;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.EPorfolio;
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+
+import javax.swing.text.html.HTML;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class IJournalImpl implements IJournal {
+
+    JournalService journalService = new JournalServiceImpl();
+    ProjectDescriptionService descriptionService = new ProjectDescriptionImpl();
+
+    @Override
+    public String exportJournal(StudentIdentifier student) {
+        return null;
+    }
+
+    @Override
+    public Boolean getPortfoliosForEvaluationPrepared(Project project) {
+        //Teilnehmer suchen
+
+        //Hat jeder Teilnehmer ein geschlossenenes Portfolio
+
+        //Hat jeder die nötigen Journal
+
+        return null;
+    }
+
+    @Override
+    public void assignMissingPortfolioTasks(Project project) {
+        //Teilnehmer suchen
+
+        //Hat jeder Teilnehmer ein geschlossenenes Portfolio
+
+        //Hat jeder die nötigen Journal
+
+    }
+
+    @Override
+    public void uploadJournalEntry(Journal journalEntry, User student) {
+
+    }
+
+    @Override
+    public void uploadFinalPortfolio(Project project, List<Journal> journalEntries, ResearchReport finalResearchReport, File presentation, User user) {
+
+    }
+
+    @Override
+    public EPorfolio getFinalPortfolioForAssessment(Project project, User user) {
+
+        EPorfolio result = new EPorfolio();
+        StudentIdentifier studentIdentifier = new StudentIdentifier(project.getId(),user.getId());
+
+        result.setDescrition(descriptionService.getProjectbyStudent(studentIdentifier));
+        result.setJournals(journalService.getAllJournals(user.getId(),project.getId()));
+        //TODO result.setReport(...);
+
+        return result;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalService.java
index c247215c82bb98e7f41d807fb22a8c9a2f87d360..755b1cf594ca1fb3516d4096567bbc2eba522b8f 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalService.java
@@ -43,16 +43,14 @@ public interface JournalService {
      * @param text content of the Journal
      * @param visibility visibility of the Journal
      * @param category category of the Journal
-     * @return true if success
      */
-     boolean saveJournal(long id, String student, String project, String text, String visibility, String category);
+    void saveJournal(String id, String student, String project, String text, String visibility, String category);
 
     /**
      * deletes a Journal
      * @param id id of the Journal
-     * @return true if success
      */
-     boolean deleteJournal(long id);
+    void deleteJournal(String id);
 
 
     void closeJournal(String journal);
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..79bf05ed35a80df31fdf7f4c1cb93ad5a16c62c0
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/JournalServiceImpl.java
@@ -0,0 +1,101 @@
+package unipotsdam.gf.modules.journal.service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.journal.model.JournalFilter;
+import unipotsdam.gf.modules.journal.model.Visibility;
+import unipotsdam.gf.modules.journal.model.dao.JournalDAO;
+import unipotsdam.gf.modules.journal.model.dao.JournalDAOImpl;
+import unipotsdam.gf.modules.journal.util.JournalUtils;
+
+import java.util.ArrayList;
+
+public class JournalServiceImpl implements JournalService {
+
+    private final Logger log = LoggerFactory.getLogger(JournalServiceImpl.class);
+    JournalDAO journalDAO = new JournalDAOImpl();
+
+    @Override
+    public Journal getJournal(String id) {
+        return journalDAO.getJournal(id);
+    }
+
+    @Override
+    public ArrayList<Journal> getAllJournals(String student, String project, JournalFilter filter) {
+        log.debug(">> get all journals(" + student + "," + project + "," + filter + ")");
+
+        ArrayList<Journal> result = new ArrayList<>();
+
+        ArrayList<Journal> dbJournals = journalDAO.getAllByProjectAndFilter(project, student, filter);
+        for (Journal j : dbJournals) {
+
+            //always show own Journals
+            if (j.getStudentIdentifier().getStudentId().equals(student)) {
+                result.add(j);
+            } else {
+
+                // if Visibility All, show if Filter allows it
+                if (j.getVisibility() == Visibility.ALL && filter == JournalFilter.ALL) {
+                    result.add(j);
+                }
+
+                //If Visibility Group, show if student is in group and filter allows it
+                //TODO: project != Group, for testing ok, change for real Service
+                if (j.getVisibility() == Visibility.GROUP && j.getStudentIdentifier().getProjectId().equals(project) && filter == JournalFilter.ALL) {
+                    result.add(j);
+                }
+
+                //TODO if Dozent
+            }
+
+        }
+        log.debug("<< get all journals(" + student, "," + project + ")");
+
+        return result;
+    }
+
+    @Override
+    public ArrayList<Journal> getAllJournals(String student, String project) {
+        log.debug(">> get all journals(" + student + "," + project + ")");
+
+        return journalDAO.getAllByProject(project);
+    }
+
+    @Override
+    public void saveJournal(String id, String student, String project, String text, String visibility, String category) {
+        log.debug(">> save journal(" + id + "," + student + "," + project + "," + text + "," + visibility + "," + category + ")");
+
+        Journal journal = new Journal(id, new StudentIdentifier(project, student), text, JournalUtils.stringToVisibility(visibility), JournalUtils.stringToCategory(category));
+
+        //if id = 0 new Journal else update
+        if (id.equals("0")) {
+
+            log.debug("save journal: create new");
+            journalDAO.createJournal(journal);
+        } else {
+            log.debug("save journal: update" + journal.getId());
+            journalDAO.updateJournal(journal);
+        }
+        log.debug("<<< save journal");
+
+    }
+
+    @Override
+    public void deleteJournal(String journal) {
+        log.debug(">>> delete journal:" + journal);
+        journalDAO.deleteJournal(journal);
+        log.debug("<<< delete journal");
+    }
+
+    @Override
+    public void closeJournal(String journal) {
+        log.debug(">>> close journal: " + journal);
+        journalDAO.closeJournal(journal);
+        log.debug("<<< close journal");
+    }
+
+    //TODO Export for assessment
+}
+
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..77ed95bb2febbf0a04a3cb6399493e657ba68125
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionImpl.java
@@ -0,0 +1,64 @@
+package unipotsdam.gf.modules.journal.service;
+
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.journal.model.Link;
+import unipotsdam.gf.modules.journal.model.ProjectDescription;
+import unipotsdam.gf.modules.journal.model.dao.LinkDAO;
+import unipotsdam.gf.modules.journal.model.dao.LinkDAOImpl;
+import unipotsdam.gf.modules.journal.model.dao.ProjectDescriptionDAO;
+import unipotsdam.gf.modules.journal.model.dao.ProjectDescriptionDAOImpl;
+
+import java.util.Date;
+
+public class ProjectDescriptionImpl implements ProjectDescriptionService {
+
+    ProjectDescriptionDAO descriptionDAO = new ProjectDescriptionDAOImpl();
+    LinkDAO linkDAO = new LinkDAOImpl();
+
+    @Override
+    public ProjectDescription getProjectbyStudent(StudentIdentifier studentIdentifier) {
+
+        //if no description exists, create a new
+        if(descriptionDAO.getDescription(studentIdentifier)==null){
+            //TODO richtige Daten, standartwerte über config?
+            ProjectDescription description = new ProjectDescription("0", studentIdentifier.getStudentId(), "Hier soll ein Turtorialtext stehen", studentIdentifier.getProjectId(), null, null, new Date().getTime());
+            descriptionDAO.createDescription(description);
+        }
+
+        ProjectDescription returnDesc = descriptionDAO.getDescription(studentIdentifier);
+        returnDesc.setLinks(linkDAO.getAllLinks(returnDesc.getId()));
+        return returnDesc;
+
+    }
+
+    @Override
+    public ProjectDescription getProjectbyId(String id) {
+        ProjectDescription returnDesc = descriptionDAO.getDescription(id);
+        returnDesc.setLinks(linkDAO.getAllLinks(returnDesc.getId()));
+        return returnDesc;
+    }
+
+    @Override
+    public void saveProjectText(StudentIdentifier studentIdentifier, String text) {
+
+        ProjectDescription desc = getProjectbyStudent(studentIdentifier);
+        desc.setDescription(text);
+        descriptionDAO.updateDescription(desc);
+    }
+
+    @Override
+    public void addLink(String project, String link, String name) {
+        Link newLink = new Link(project,project,name,link);
+        linkDAO.addLink(newLink);
+    }
+
+    @Override
+    public void deleteLink(String link) {
+        linkDAO.deleteLink(link);
+    }
+
+    @Override
+    public void closeDescription(String projectDescrID) {
+        descriptionDAO.closeDescription(projectDescrID);
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionService.java
index dfe3966fe100e53173466b5d66ecf2861d5d9e15..2d76e6c454b6c745611742a95b734f9a9d7212a6 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/service/ProjectDescriptionService.java
@@ -1,5 +1,6 @@
 package unipotsdam.gf.modules.journal.service;
 
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
 import unipotsdam.gf.modules.journal.model.ProjectDescription;
 
 /**
@@ -9,13 +10,14 @@ import unipotsdam.gf.modules.journal.model.ProjectDescription;
 public interface ProjectDescriptionService {
 
 
-    ProjectDescription getProject(String project);
+    ProjectDescription getProjectbyStudent(StudentIdentifier studentIdentifier);
 
-    void saveProjectText(String text);
+    ProjectDescription getProjectbyId(String id);
+    void saveProjectText(StudentIdentifier studentIdentifier, String text);
 
-    void addLink(String link, String name);
+    void addLink(String project, String link, String name);
 
     void deleteLink(String link);
 
-    void closeDescription(String desc);
+    void closeDescription(String projectDescriptionId);
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..d38cf359ae62c553574bce825ea6b17abce99118
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/util/JournalUtils.java
@@ -0,0 +1,93 @@
+package unipotsdam.gf.modules.journal.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import unipotsdam.gf.core.database.mysql.MysqlConnect;
+import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet;
+import unipotsdam.gf.modules.journal.model.Visibility;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+
+/**
+ * Utility class for Journal and Project description
+ */
+public class JournalUtils {
+
+    public static final Logger log = LoggerFactory.getLogger(JournalUtils.class);
+
+    /**
+     * Coverts a strirng to enum category
+     *
+     * @param category string
+     * @return category, TITLE if string does not match
+     */
+    public static Category stringToCategory(String category) {
+
+        Category c;
+
+        // If String does not match enum IllegalArgumentException
+        try {
+            c = Category.valueOf(category);
+        } catch (IllegalArgumentException e) {
+            c = Category.TITEL;
+            //TODO extra Category for fail?
+            JournalUtils.log.debug("Illegal argument for visibility, default to TITLR");
+        }
+        return c;
+    }
+
+    /**
+     * Converts a string to enum visibility
+     *
+     * @param visibility string
+     * @return visibility, NONE if string does not match
+     */
+    public static Visibility stringToVisibility(String visibility) {
+        Visibility v;
+
+        // If String does not match enum IllegalArgumentException
+        try {
+            v = Visibility.valueOf(visibility);
+        } catch (IllegalArgumentException e) {
+            v = Visibility.MINE;
+            JournalUtils.log.debug("Illegal argument for visibility, default to MINE");
+        }
+        return v;
+    }
+
+    /**
+     * Checks if uuid ist used
+     *
+     * @param id uuid
+     * @return true if free
+     */
+    public static boolean existsId(String id, String table) {
+
+        // establish connection
+        MysqlConnect connection = new MysqlConnect();
+        connection.connect();
+
+        // build and execute request
+        //TODO Formatstring
+        String request = "SELECT COUNT(*) > 0 AS `exists` FROM " + table+ " WHERE id = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request,id);
+        log.debug("querry: " + rs.toString());
+        if (rs.next()) {
+            // save the response
+            int count = rs.getInt("exists");
+
+            // close connection
+            connection.close();
+
+            // return true if we found the id
+            if (count < 1) {
+                return false;
+            } else {
+                return true;
+            }
+        }
+
+        // something happened
+        return true;
+
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java
index 218ad0706a6b71c2ec61726f48034e9db002d39f..68059e911c2c6e91921895d1cc26bb9a837bd3ea 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/JournalView.java
@@ -2,10 +2,11 @@ package unipotsdam.gf.modules.journal.view;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
 import unipotsdam.gf.modules.journal.model.Journal;
 import unipotsdam.gf.modules.journal.model.JournalFilter;
-import unipotsdam.gf.modules.journal.service.DummyJournalService;
 import unipotsdam.gf.modules.journal.service.JournalService;
+import unipotsdam.gf.modules.journal.service.JournalServiceImpl;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
@@ -23,8 +24,8 @@ import java.util.ArrayList;
 @Path("/journal")
 public class JournalView {
 
-    private Logger log = LoggerFactory.getLogger(JournalView.class);
-    private JournalService journalService = new DummyJournalService();
+    private final Logger log = LoggerFactory.getLogger(JournalView.class);
+    private final JournalService journalService = new JournalServiceImpl();
 
     /**
      * Returns a specific Journal
@@ -67,25 +68,6 @@ public class JournalView {
         return Response.ok(result).build();
     }
 
-    /**
-     * Returns all Journals for a student
-     * @param student the requested student
-     * @param project the requested project
-     * @return Json of all Journals
-     */
-    @GET
-    @Produces(MediaType.APPLICATION_JSON)
-    @Path("/journals/{student}/{project}")
-    public Response getAllJournals (@PathParam("student") String student, @PathParam("project") String project){
-
-        log.debug(">>> getJournals: student=" + student + " project=" + project );
-
-        ArrayList<Journal> result = journalService.getAllJournals(student,project);
-
-        log.debug(">>> getJournals: size=" + result.size());
-
-        return Response.ok(result).build();
-    }
 
     /**
      * Saves or edits a Journal
@@ -102,27 +84,27 @@ public class JournalView {
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     @Produces(MediaType.TEXT_PLAIN)
     @Path("/save")
-    public Response saveJournal(@FormParam("id") long id, @FormParam("student") String student,
+    public Response saveJournal(@FormParam("id") String id, @FormParam("student") String student,
                                 @FormParam("project") String project, @FormParam("text") String text,
                                 @FormParam("visibility") String visibility, @FormParam("category") String category) {
 
-        log.debug(">>> saveJournal");
+        log.debug(">>> createJournal");
 
         journalService.saveJournal(id, student, project, text, visibility, category);
 
         //TODO token
         URI location;
         try {
-            location = new URI("../pages/eportfolio.jsp?token=test");
-            log.debug("<<< saveJournal: redirect to "  +location.toString());
+            location = new URI("../pages/eportfolio.jsp?token=" + student + "&projectId=" + project);
+            log.debug("<<< createJournal: redirect to " + location.toString());
             return Response.temporaryRedirect(location).build();
 
         } catch (URISyntaxException e) {
             e.printStackTrace();
-            log.debug("saveJournal: redirect failed" );
+            log.debug("createJournal: redirect failed");
         }
 
-        log.debug("<<< saveJournal");
+        log.debug("<<< createJournal");
 
         return Response.ok().build();
 
@@ -137,7 +119,7 @@ public class JournalView {
     @GET
     @Produces(MediaType.TEXT_PLAIN)
     @Path("/delete/{id}")
-    public Response deleteJournal(@PathParam("id") long id) {
+    public Response deleteJournal(@PathParam("id") String id) {
 
         log.debug(">>> deleteJournal: id=" + id);
 
@@ -155,10 +137,11 @@ public class JournalView {
     public Response closeJournal(String journal){
         log.debug(">>> closeJournal: " + journal);
 
+        StudentIdentifier student = journalService.getJournal(journal).getStudentIdentifier();
         journalService.closeJournal(journal);
         //TODO token
         try {
-            URI location = new URI("../pages/eportfolio.jsp?");
+            URI location = new URI("../pages/eportfolio.jsp?token=" + student.getStudentId() + "&projectId=" + student.getProjectId());
             log.debug("<<< closeJournal: redirect to "  +location.toString());
             return Response.temporaryRedirect(location).build();
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/ProjectDescriptionView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/ProjectDescriptionView.java
index ba29c2592521befb9c182edad18ec13d0b10b288..2b9fe312ee621cfb9ce686deeccfcce77f16c8e1 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/ProjectDescriptionView.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/journal/view/ProjectDescriptionView.java
@@ -2,8 +2,9 @@ package unipotsdam.gf.modules.journal.view;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
 import unipotsdam.gf.modules.journal.model.ProjectDescription;
-import unipotsdam.gf.modules.journal.service.DummyProjectDescription;
+import unipotsdam.gf.modules.journal.service.ProjectDescriptionImpl;
 import unipotsdam.gf.modules.journal.service.ProjectDescriptionService;
 
 import javax.ws.rs.*;
@@ -21,17 +22,17 @@ import java.net.URISyntaxException;
 @Path("/projectdescription")
 public class ProjectDescriptionView {
 
-    private Logger log = LoggerFactory.getLogger(ProjectDescriptionView.class);
-    private ProjectDescriptionService descriptionService = new DummyProjectDescription();
+    private final Logger log = LoggerFactory.getLogger(ProjectDescriptionView.class);
+    private final ProjectDescriptionService descriptionService = new ProjectDescriptionImpl();
 
     //get Description
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    @Path("{project}")
-    public Response getProjectDescription(@PathParam("project") String project){
-        log.debug(">>> getProjectDescription: " + project);
+    @Path("{project}/{student}")
+    public Response getProjectDescription(@PathParam("project") String project, @PathParam("student") String student){
+        log.debug(">>> getProjectDescription: " + project + "/" + student);
 
-        ProjectDescription result = descriptionService.getProject(project);
+        ProjectDescription result = descriptionService.getProjectbyStudent(new StudentIdentifier(project, student));
 
         log.debug(">>> getProjectDescription");
         return Response.ok(result).build();
@@ -42,14 +43,13 @@ public class ProjectDescriptionView {
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     @Produces(MediaType.TEXT_PLAIN)
     @Path("/saveText")
-    public Response saveProjectText(@FormParam("student")String student,@FormParam("project")String project,@FormParam("text")String text){
+    public Response saveProjectText(@FormParam("student") String student, @FormParam("project") String project, @FormParam("text") String text) {
         log.debug(">>> saveText: " + text);
-
-        descriptionService.saveProjectText(text);
+        descriptionService.saveProjectText(new StudentIdentifier(project,student),text);
 
         //TODO token
         try {
-            URI location = new URI("../pages/eportfolio.jsp?token=test");
+            URI location = new URI("../pages/eportfolio.jsp?token=" + student + "&projectId=" + project);
             log.debug("<<< saveText: redirect to "  +location.toString());
             return Response.temporaryRedirect(location).build();
 
@@ -58,7 +58,8 @@ public class ProjectDescriptionView {
             log.debug("saveText: redirect failed" );
         }
 
-        log.debug("<<< saveText");log.debug(">>> saveText");
+        log.debug("<<< saveText");
+        log.debug(">>> saveText");
 
         return Response.ok().build();
     }
@@ -67,14 +68,15 @@ public class ProjectDescriptionView {
     @POST
     @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
     @Path("/addLink")
-    public Response addLink(@FormParam("link") String link, @FormParam("name") String name){
+    public Response addLink(@FormParam("link") String link, @FormParam("name") String name, @FormParam("projectdescriptionId") String project){
         log.debug(">>> addLink: " + name + ":" + link);
 
-        descriptionService.addLink(link, name );
+        ProjectDescription desc = descriptionService.getProjectbyId(project);
+        descriptionService.addLink(project,link, name );
 
 
         try {
-            URI location = new URI("../pages/eportfolio.jsp");
+            URI location = new URI("../pages/eportfolio.jsp?token="+ desc.getStudent().getStudentId()+"&projectId="+desc.getStudent().getProjectId());
             log.debug("<<< addLink: redirect to "  +location.toString());
             return Response.temporaryRedirect(location).build();
 
@@ -115,14 +117,15 @@ public class ProjectDescriptionView {
     //close descr
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.TEXT_PLAIN)
     @Path("/close")
     public Response closeDescription(String desc){
         log.debug(">>> closeDescription: " + desc);
 
+        StudentIdentifier student = descriptionService.getProjectbyId(desc).getStudent();
         descriptionService.closeDescription(desc);
-        //TODO token
         try {
-            URI location = new URI("../pages/eportfolio.jsp");
+            URI location = new URI("../pages/eportfolio.jsp?token=" + student.getStudentId() + "&projectId=" + student.getProjectId());
             log.debug("<<< closeDescription: redirect to "  +location.toString());
             return Response.temporaryRedirect(location).build();
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/Category.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Category.java
similarity index 82%
rename from gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/Category.java
rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Category.java
index 0929f342834ff143da72c6ebfa74ee911138338e..d371d33983460d0893f9136329b8aea4f36f0379 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/Category.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Category.java
@@ -1,4 +1,4 @@
-package unipotsdam.gf.core.management.utils;
+package unipotsdam.gf.modules.peer2peerfeedback;
 
 /**
  Categories for feedback and documents
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java
new file mode 100644
index 0000000000000000000000000000000000000000..b8098bebafa5b556b4403ef1ac256b7ac1450d2b
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java
@@ -0,0 +1,75 @@
+package unipotsdam.gf.modules.peer2peerfeedback;
+
+import org.mockito.Mockito;
+import uk.co.jemos.podam.api.PodamFactory;
+import uk.co.jemos.podam.api.PodamFactoryImpl;
+import unipotsdam.gf.assignments.Assignee;
+import unipotsdam.gf.assignments.NotImplementedLogger;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.interfaces.Feedback;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+
+import java.io.File;
+import java.util.ArrayList;
+
+public class DummyFeedback implements Feedback {
+
+    /**
+     * Utility to creaty dummy data for students
+     */
+    PodamFactory factory = new PodamFactoryImpl();
+
+    private static Boolean missingTaskAssigned = false;
+
+
+    public DummyFeedback() {
+
+    }
+
+    @Override
+    public Peer2PeerFeedback createPeer2PeerFeedbackmask(
+            User feedbackuser, User selectedstudent, File document) {
+        return null;
+    }
+
+    @Override
+    public Boolean giveFeedback(Peer2PeerFeedback feedback, ResearchReport document) {
+        return null;
+    }
+
+    @Override
+    public ArrayList<Peer2PeerFeedback> showFeedback(User student) {
+        return null;
+    }
+
+    @Override
+    public int countFeedback(User student) {
+        return 0;
+    }
+
+    @Override
+    public Boolean checkFeedbackConstraints(Project project) {
+        // TODO implement cornstaints
+        NotImplementedLogger.logAssignment(Assignee.KATHARINA, Feedback.class, "check Feedback constraints",
+                "checking feedback constraints ");
+        return missingTaskAssigned;
+    }
+
+    @Override
+    public void assigningMissingFeedbackTasks(Project project) {
+        NotImplementedLogger.logAssignment(Assignee.KATHARINA, Feedback.class, "assigningMissingFeedbackTasks",
+                "assigning feedback tasks ");
+        missingTaskAssigned = true;
+    }
+
+    @Override
+    public void assignFeedbackTasks() {
+
+    }
+
+    @Override
+    public ResearchReport getFeedbackTask(User student) {
+        return factory.manufacturePojo(ResearchReport.class);
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java
index bc040fad7ccfad8993d3a1f33ca2eebfbefb48a3..9b44f2d2e81a8ca1133da2917cfb47ba69bfdb7d 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java
@@ -1,7 +1,6 @@
 package unipotsdam.gf.modules.peer2peerfeedback;
 
 import unipotsdam.gf.core.management.user.User;
-import unipotsdam.gf.core.management.utils.Category;
 
 import java.io.File;
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java
index d68e106fb4c8d007e1d5b1a5a8c5e7eef4289487..55bd0e9dad14bc9e1954f223599ebdb4587f0dd6 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java
@@ -1,7 +1,6 @@
 package unipotsdam.gf.modules.peer2peerfeedback;
 
 import unipotsdam.gf.core.management.user.User;
-import unipotsdam.gf.core.management.utils.Category;
 
 import java.io.File;
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/DummyResearchReportCounter.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/DummyResearchReportCounter.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1451156914c3db9a513df29f93da077bf6e4776
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/DummyResearchReportCounter.java
@@ -0,0 +1,6 @@
+package unipotsdam.gf.modules.researchreport;
+
+public class DummyResearchReportCounter {
+
+    public static Boolean feedbackTasksNotAssigned = true;
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/DummyResearchReportManagement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/DummyResearchReportManagement.java
new file mode 100644
index 0000000000000000000000000000000000000000..b383fe36766219dde8c5ebcbef5a5395124d513f
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/DummyResearchReportManagement.java
@@ -0,0 +1,69 @@
+package unipotsdam.gf.modules.researchreport;
+
+import uk.co.jemos.podam.api.PodamFactory;
+import uk.co.jemos.podam.api.PodamFactoryImpl;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.assignments.Assignee;
+import unipotsdam.gf.assignments.NotImplementedLogger;
+import unipotsdam.gf.interfaces.Feedback;
+
+import javax.inject.Inject;
+import java.io.File;
+
+public class DummyResearchReportManagement implements ResearchReportManagement {
+
+
+
+    /**
+     * Utility to creaty dummy data for students
+     */
+    PodamFactory factory = new PodamFactoryImpl();
+
+
+    @Inject
+    Feedback feedback;
+
+    @Override
+    public String createResearchReport(
+            ResearchReport researchReport, Project project, User student) {
+
+        // real implementation should check if all the constraints are ok before starting with feedbacks
+        // this assumes uploading and giving feedback is in the same phase (no teacher decision to go from
+        // uploading dossiers to feedback
+        if (DummyResearchReportCounter.feedbackTasksNotAssigned) {
+            DummyResearchReportCounter.feedbackTasksNotAssigned = false;
+            feedback.assignFeedbackTasks();
+        }
+        return factory.manufacturePojo(ResearchReport.class).getId();
+    }
+
+    @Override
+    public boolean updateResearchReport(ResearchReport researchReport)  {
+        NotImplementedLogger.logAssignment(Assignee.QUARK, ResearchReportManagement.class, null, "updateResearchReport");
+        return false;
+    }
+
+    @Override
+    public boolean deleteReport(ResearchReport researchReport)  {
+        NotImplementedLogger.logAssignment(Assignee.QUARK, ResearchReportManagement.class);
+        return false;
+    }
+
+    @Override
+    public File getResearchReport(ResearchReport researchReport) {
+        NotImplementedLogger.logAssignment(Assignee.QUARK, ResearchReportManagement.class);
+        return null;
+    }
+
+    @Override
+    public void createFinalResearchReport(
+            ResearchReport researchReport, Project project, User student) {
+        NotImplementedLogger.logAssignment(Assignee.QUARK, ResearchReportManagement.class);
+    }
+
+    @Override
+    public void setFeedback(Feedback feedback) {
+        this.feedback = feedback;
+    }
+}
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReport.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReport.java
index c90d34735321bcdeb5b81ecc16acf509529d9625..31f5d35640bc5c80f7084ace747202fa30c9bdd2 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReport.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReport.java
@@ -6,6 +6,7 @@ public class ResearchReport {
     // TODO add properties
     private String title;
     private ResearchQuestion researchQuestion;
+    private String id;
     private List<String> learningGoals;
     private String method;
     private String research;
@@ -107,4 +108,12 @@ public class ResearchReport {
     public void setTimeplan(Timeplanning timeplan) {
         this.timeplan = timeplan;
     }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReportManagement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReportManagement.java
index 5355ab90768c8eadfc0800c2553dd70a483f5324..c2226c52f436fae65caaa6962cb3b9faaf45b69a 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReportManagement.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/researchreport/ResearchReportManagement.java
@@ -1,6 +1,9 @@
 package unipotsdam.gf.modules.researchreport;
 
-import unipotsdam.gf.modules.researchreport.ResearchReport;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.assignments.NotImplementedLogger;
+import unipotsdam.gf.interfaces.Feedback;
 
 import java.io.File;
 
@@ -15,9 +18,12 @@ public interface ResearchReportManagement {
      * Create a File
      *
      * @param researchReport Name of the Report
+     * @param project
+     * @param student
      * @return Returns the reportId
      */
-    String createResearchReport(ResearchReport researchReport);
+    String createResearchReport(
+            ResearchReport researchReport, Project project, User student);
 
 
     /**
@@ -26,14 +32,14 @@ public interface ResearchReportManagement {
      * @param researchReport Name of the Report
      * @return Returns if the report is updated
      */
-    boolean updateResearchReport(ResearchReport researchReport);
+    boolean updateResearchReport(ResearchReport researchReport) ;
 
     /**
      * Delete a File
      *
      * @param researchReport Name of the Report
      */
-    boolean deleteReport(ResearchReport researchReport);
+    boolean deleteReport(ResearchReport researchReport) ;
 
 
     /**
@@ -41,8 +47,23 @@ public interface ResearchReportManagement {
      * @param researchReport Name of the Report
      * @return Returns the Report
      */
-    File getResearchReport(ResearchReport researchReport);
+    File getResearchReport(ResearchReport researchReport) ;
 
 
+    /**
+     * This represents a second version of the research report where the feedback is incorporated
+     * There is only this second version. Otherwise we could cycle the dossier upload and feedback (would be to
+     * complicated)
+     * @param researchReport
+     * @param project
+     * @param student
+     */
+    void createFinalResearchReport(ResearchReport researchReport, Project project, User student)
+            ;
 
+    /**
+     * the dependency to feedback should be settable externally for test reasons
+     * @param feedback
+     */
+    void setFeedback(Feedback feedback);
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/MarkdownUtils.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/view/MarkdownUtils.java
similarity index 93%
rename from gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/MarkdownUtils.java
rename to gemeinsamforschen/src/main/java/unipotsdam/gf/view/MarkdownUtils.java
index 5d25997fb52658f8d3f209c289677286659ccb59..9f626e2ccbeb9b48b003a00e4ea7dd62b04345a1 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/MarkdownUtils.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/view/MarkdownUtils.java
@@ -1,4 +1,4 @@
-package unipotsdam.gf.core.management.utils;
+package unipotsdam.gf.view;
 
 import org.commonmark.node.Node;
 import org.commonmark.parser.Parser;
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/view/Messages.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/view/Messages.java
new file mode 100644
index 0000000000000000000000000000000000000000..986c7d741e87d479673663e4afccd5d685bc2249
--- /dev/null
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/view/Messages.java
@@ -0,0 +1,20 @@
+package unipotsdam.gf.view;
+
+import unipotsdam.gf.core.management.project.Project;
+
+public class Messages {
+    public static String GroupFormation(Project project){
+        // TODO add link to site + markup
+        return "Die Gruppen wurden für den Kurs "+ project.getId() + " erstellt";
+    }
+
+    public static String NewFeedbackTask(Project project) {
+        // TODO add link to site + markup
+        return "Eine neue Feedbackaufgabe wurde für den Kurs "+ project.getId() + " erstellt";
+    }
+
+    public static String AssessmentPhaseStarted(Project project) {
+        // TODO add link to site + markup
+        return "Die Bewertungsphase hat begonnen. Bitte geht auf ... und macht ....";
+    }
+}
diff --git a/gemeinsamforschen/src/main/resources/log4j2.xml b/gemeinsamforschen/src/main/resources/log4j2.xml
index 44a5bde6b293c2233cb735339118c356d16db9dc..0282185a4ed09bdaf570f6c40599a7fc187866ed 100644
--- a/gemeinsamforschen/src/main/resources/log4j2.xml
+++ b/gemeinsamforschen/src/main/resources/log4j2.xml
@@ -6,7 +6,7 @@
         </Console>
     </Appenders>
     <Loggers>
-        <Root level="debug">
+        <Root level="INFO">
             <AppenderRef ref="Console"/>
         </Root>
     </Loggers>
diff --git a/gemeinsamforschen/src/main/webapp/assets/css/annotationStyle.css b/gemeinsamforschen/src/main/webapp/assets/css/annotationStyle.css
index 74ac1c7a1a6fa585af3de0ca37f55496f13f22e9..0dbf610d881507005fe7c9e4ff0bf8475356f093 100644
--- a/gemeinsamforschen/src/main/webapp/assets/css/annotationStyle.css
+++ b/gemeinsamforschen/src/main/webapp/assets/css/annotationStyle.css
@@ -85,7 +85,7 @@ ol {
     color: #e6e6e6;
     text-decoration: none;
 }
-.annotation-header-title {
+.annotation-header-data {
     display: flex;
     flex-flow: column;
     width: calc(100% - 40px);
@@ -123,11 +123,11 @@ ol {
 .annotation-footer span {
     margin-left: 5px;
 }
-.annotation-footer-delete {
+.annotation-footer-edit {
     margin-right: 5px;
     cursor: pointer;
 }
-.annotation-footer-date {
+.flex-one {
     flex: 1
 }
 .container-fluid-content {
@@ -135,9 +135,12 @@ ol {
     flex-flow: column;
     height: 100%;
 }
-.content-header {
+.flex {
     display: flex;
 }
+.flex .container-fluid{
+    flex: 1;
+}
 .full-height {
     height: 100%;
 }
@@ -148,4 +151,7 @@ ol {
 .leftcontent-text {
     overflow: scroll;
 }
+.resize-vertical {
+    resize: vertical;
+}
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/css/e-portfolio.css b/gemeinsamforschen/src/main/webapp/assets/css/e-portfolio.css
index c987b53b4701008b110f05cfe674ae9fc5d02f15..eaf72ed574d05d1b2f3f77784f42e01966a24803 100644
--- a/gemeinsamforschen/src/main/webapp/assets/css/e-portfolio.css
+++ b/gemeinsamforschen/src/main/webapp/assets/css/e-portfolio.css
@@ -3,7 +3,7 @@
     grid-gap: 10px;
     grid-template-columns: 2fr 1fr 15%;
     grid-template-areas:
-            "title edit group"
+            "edit edit group"
             "text text links"
             "text text ..."
 ;
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/Quiz-docent.js b/gemeinsamforschen/src/main/webapp/assets/js/Quiz-docent.js
new file mode 100644
index 0000000000000000000000000000000000000000..2eedd8af5d6c4a7690ae11b782dcfe0fecb8c017
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/assets/js/Quiz-docent.js
@@ -0,0 +1,87 @@
+$(document).ready(function () {
+    $('#newQuiz').on('click', function(){
+        location.href="createQuiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
+    });
+
+    let loading = $('#loadbar').hide();
+    $(document)
+        .ajaxStart(function () {
+            loading.show();
+        }).ajaxStop(function () {
+        loading.hide();
+    });
+
+    $("label.btn").on('click',function () {
+        let choice = $(this).find('input:radio').val();
+        $('#loadbar').show();
+        $('#quiz').fadeOut();
+        setTimeout(function(){
+            $( "#answer" ).html(  $(this).checking(choice) );
+            $('#quiz').show();
+            $('#loadbar').fadeOut();
+            /* something else */
+        }, 1500);
+    });
+
+    $ans = 3;
+
+    let projectId = document.getElementById('projectId').innerText.trim();
+    $.ajax({
+        url: '../rest/assessments/project/'+projectId+'/quiz/',
+        type: 'GET',
+        success: function (data) {
+            let table = document.getElementById('tableQuiz');
+            for (let quiz = 0; quiz < data.length; quiz++){
+                let question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",","");
+                let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers);
+                let colspan = answers.length;
+                let trQuestion = document.createElement('TR');
+                let tdQuestion = '<td colspan="' + colspan + '"' +
+                    ' data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' +
+                    '' + data[quiz].question + '</td>';
+                trQuestion.innerHTML = tdQuestion;
+                let trAnswers = document.createElement('TR');
+                let answersTd='<td style="display: block;">' +
+                    '<div ' +
+                    'class="quiz collapse" ' +
+                    'id="'+question+'" ' +
+                    'data-toggle="buttons">' +
+                    '<p hidden>'+data[quiz].question+'</p>';
+                for (let i = 0; i < answers.length; i++) {
+                    answersTd = answersTd + '<div>' +
+                        '<label class="element-animation1 btn btn-lg btn-primary btn-block">' +
+                        '<span class="btn-label">' +
+                        '<i class="glyphicon glyphicon-chevron-right">' +
+                        '</i>' +
+                        '</span>' +
+                        '<input type="checkbox" value="'+answers[i]+'">' + answers[i] + '' +
+                        '</label>' +
+                        '</div>';
+                }
+                tdQuestion ="";
+                answers=[];
+                let deletebutton = '<button class="btn btn-danger" id="delete'+question+'">löschen</button>';
+                trAnswers.innerHTML = answersTd+deletebutton+'</div></td>';
+                table.appendChild(trQuestion);
+                table.appendChild(trAnswers);
+                $("#delete"+question).click({quizId: data[quiz].question}, deleteQuiz);
+            }
+        },
+        error: function (a) {
+            alert('Fehler ' + a);
+        }
+    });
+
+    function deleteQuiz(event){
+        $.ajax({
+            url: '../rest/assessments/quiz/' + encodeURIComponent(event.data.quizId),
+            type: 'POST',
+            success: function () {
+                document.location.href="Quiz-docent.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
+            },
+            error: function(a){
+                alert(a)
+            }
+        });
+    }
+});
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js b/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js
index afd43343d62eb5b43aa235ceb3c94683ede88baf..fcb6ea709458eddd262301776d4e3fde08ae4a84 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/Quiz.js
@@ -1,26 +1,31 @@
 $(document).ready(function(){
+    let projectId = document.getElementById('projectId').innerText.trim();
     $.ajax({
-        url: '../rest/assessments/project/1/quiz/',
+        url: '../rest/assessments/project/'+projectId+'/quiz/',
+        projectId: projectId,
         type: 'GET',
         success: function (data) {
-            var table = document.getElementById('myQuizzes');
-            for (var quiz = 0; quiz < data.length; quiz++){
-                var answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers);
-                var colspan = answers.length;
-                var trQuestion = document.createElement('TR');
+            let table = document.getElementById('myQuizzes');
+            for (let quiz = 0; quiz < data.length; quiz++){
+                let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers);
+                let colspan = answers.length;
+                let trQuestion = document.createElement('TR');
                 trQuestion.className="pageChanger";
                 trQuestion.innerHTML = '<td colspan="' + colspan + '"><h3>' +
-                    '<a href="viewQuiz.jsp?token='+getUserTokenFromUrl()+'&quizId='+ encodeURI(data[quiz].question) + '"</a>' +
+                    '<a href="viewQuiz.jsp' +
+                    '?token='+getUserTokenFromUrl()+
+                    '&projectId='+projectId+
+                    '&quizId='+ encodeURIComponent(data[quiz].question)+'"</a>' +
                     data[quiz].question+'</h3></td>';
                 table.appendChild(trQuestion);
             }
         },
-        error: function (a, b, c) {
+        error: function (a) {
             alert('Fehler ' + a);
         }
     });
 
     $('#newQuiz').on('click', function(){
-        location.href="createQuiz.jsp?token="+getUserTokenFromUrl();
+        location.href="createQuiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
     });
 });
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js b/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js
new file mode 100644
index 0000000000000000000000000000000000000000..787ccd96b74c391cd417e4733b5281611012720b
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/assets/js/annotationRest.js
@@ -0,0 +1,101 @@
+/**
+ * POST: Save an annotation in the database
+ *
+ * @param annotationPostRequest The post request
+ * @param responseHandler The response handler
+ */
+function createAnnotation(annotationPostRequest, responseHandler) {
+    var url = "../rest/annotations/";
+    var json = JSON.stringify(annotationPostRequest);
+    $.ajax({
+        url: url,
+        type: "POST",
+        data: json,
+        contentType: "application/json",
+        dataType: "json",
+        success: function (response) {
+            responseHandler(response);
+        }
+    });
+}
+
+/**
+ * PATCH: Alter an annotation in database
+ *
+ * @param id The annotation id
+ * @param annotationPatchRequest The patch request
+ * @param responseHandler The response handler
+ */
+function alterAnnotation(id, annotationPatchRequest, responseHandler) {
+    var url = "../rest/annotations/" + id;
+    var json = JSON.stringify(annotationPatchRequest);
+    $.ajax({
+        url: url,
+        type: "PATCH",
+        data: json,
+        contentType: "application/json",
+        dataType: "json",
+        success: function (response) {
+            responseHandler(response);
+        }
+    });
+}
+
+/**
+ * DELETE: Delete an annotation from database
+ *
+ * @param id The annotation id
+ */
+function deleteAnnotation(id, responseHandler) {
+    var url = "../rest/annotations/" + id;
+    $.ajax({
+        url: url,
+        type: "DELETE",
+        dataType: "json",
+        success: function (response) {
+            responseHandler(response)
+        }
+    });
+}
+
+/**
+ * GET: Get a specific annotation for a given id
+ *
+ * @param id The id of the annotation
+ * @param responseHandler The response handler
+ */
+function getAnnotation(id, responseHandler) {
+    var url = "../rest/annotations/" + id;
+    $.ajax({
+        url: url,
+        type: "GET",
+        dataType: "json",
+        success: function (response) {
+            // handle the response
+            responseHandler(response);
+        }
+    })
+}
+
+/**
+ * GET: Get all annotations from database for a specific target
+ *
+ * @param targetId The target id
+ * @param responseHandler The response handler
+ */
+function getAnnotations(targetId, responseHandler) {
+    var url = "../rest/annotations/target/" + targetId;
+    $.ajax({
+        url: url,
+        type: "GET",
+        dataType: "json",
+        success: function (response) {
+            // sort the responding annotations by timestamp (DESC)
+            response.sort(function (a, b) {
+                return a.timestamp - b.timestamp;
+            });
+            // handle the response
+            responseHandler(response);
+        }
+    });
+}
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js b/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js
index beba2528b6e0ece7ca6ba9a2c4ea65d89d9693c1..5150c1f92e7e23ebe6045b9df333dce7667093a9 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/annotationScript.js
@@ -1,17 +1,20 @@
-// initialize userId, userColors and targetId
-var userId = randomUserId();
+// initialize userToken, userColors and targetId
+var userToken = getUserTokenFromUrl();
 var userColors = new Map();
 var userColorsDark = new Map();
 var targetId = 200;
 
-// declare document text
-var documentText;
+// declare document text, start and end character
+var documentText, startCharacter, endCharacter;
 
 /**
  * This function will fire when the DOM is ready
  */
 $(document).ready(function() {
 
+    // connect to websocket on page ready
+    connect(targetId);
+
     /**
      * Context menu handler
      */
@@ -19,30 +22,16 @@ $(document).ready(function() {
         selector: '.context-menu-one',
         callback: function(key, options) {
 
-            // close context menu
-            window.close;
-
-            // initialize selected body
-            var body = getSelectedText();
-
-            // if user selected something
-            if (body.length > 0) {
-                // annotationPostRequest
-                var request = {
-                    userId: userId,
-                    targetId: targetId,
-                    body: body,
-                    startCharacter: window.getSelection().getRangeAt(0).startOffset,
-                    endCharacter: window.getSelection().getRangeAt(0).endOffset
-                };
-
-                console.log(request);
-
-                createAnnotation(request, function(response) {
-                    // display the new annotation
-                    displayAnnotation(response);
+            // action for 'annotation' click
+            if (key == 'annotation') {
+                // show modal if something is selected
+                if (getSelectedText().length > 0) {
+                    startCharacter = window.getSelection().getRangeAt(0).startOffset;
+                    endCharacter = window.getSelection().getRangeAt(0).endOffset;
 
-                });
+                    // display annotation create modal
+                    $('#annotation-create-modal').modal("show");
+                }
             }
 
         },
@@ -58,116 +47,181 @@ $(document).ready(function() {
         location.href="givefeedback.jsp?token=" + getUserTokenFromUrl();
     });
 
-    documentText = $('#documentText').html();
+    /**
+     * validation of annotation create form inside the modal
+     */
+    $('#annotation-create-form').validate({
+        rules: {
+            title: {
+                required: true,
+                maxlength: 120
+            },
+            comment: {
+                required: true,
+                maxlength: 400
+            }
+        },
+        messages: {
+            title: {
+                required: "Ein Titel wird benötigt",
+                maxlength: "Maximal 120 Zeichen erlaubt"
+            },
+            comment: {
+                required: "Ein Kommentar wird benötigt",
+                maxlength: "Maximal 400 Zeichen erlaubt"
+            }
+        }
+    });
 
-    // fetch annotations from server on page start
-    getAnnotations(targetId, function (response) {
-        // iterate over annotations and display each
-        $.each(response, function (i, annotation) {
-            displayAnnotation(annotation);
-        })
+    /**
+     * validation of annotation edit form inside the modal
+     */
+    $('#annotation-edit-form').validate({
+        rules: {
+            title: {
+                required: true,
+                maxlength: 120
+            },
+            comment: {
+                required: true,
+                maxlength: 400
+            }
+        },
+        messages: {
+            title: {
+                required: "Ein Titel wird benötigt",
+                maxlength: "Maximal 120 Zeichen erlaubt"
+            },
+            comment: {
+                required: "Ein Kommentar wird benötigt",
+                maxlength: "Maximal 400 Zeichen erlaubt"
+            }
+        }
     });
 
-});
+    /**
+     * Save button of the annotation create modal
+     * hide modal and build new annotation
+     */
+    $('#btnSave').click(function () {
+        if ($('#annotation-create-form').valid()) {
+            // get title and comment from form
+            var title = $('#annotation-form-title').val();
+            var comment = $('#annotation-form-comment').val();
 
-/**
- * POST: Save an annotation in the database
- *
- * @param annotationPostRequest The post request
- * @param responseHandler The response handler
- */
-function createAnnotation(annotationPostRequest, responseHandler) {
-    var url = "http://localhost:8080/rest/annotations/";
-    var json = JSON.stringify(annotationPostRequest);
-    $.ajax({
-        url: url,
-        type: "POST",
-        data: json,
-        contentType: "application/json",
-        dataType: "json",
-        success: function (response) {
-            responseHandler(response);
+            // hide and clear the modal
+            $('#annotation-create-modal').modal('hide');
+
+            // save the new annotation in db and display it
+            saveNewAnnotation(title, comment, startCharacter, endCharacter);
         }
     });
-}
 
-/**
- * PATCH: Alter an annotation in database
- *
- * @param id The annotation id
- * @param annotationPatchRequest The patch request
- * @param responseHandler The response handler
- */
-function alterAnnotation(id, annotationPatchRequest, responseHandler) {
-    var url = "http://localhost:8080/rest/annotations/" + id;
-    var json = JSON.stringify(annotationPatchRequest);
-    $.ajax({
-        url: url,
-        type: "PATCH",
-        data: json,
-        contentType: "application/json",
-        dataType: "json",
-        success: function (response) {
-            responseHandler(response);
+    /**
+     * Edit button of the annotation edit modal
+     * hide modal and alter the annotation
+     */
+    $('#btnEdit').click(function () {
+        if ($('#annotation-edit-form').valid()) {
+            // get title and comment from clicked annotation card
+            var id = $('#annotation-edit-modal').data('id');
+            var card = $('#' + id);
+            var title = card.find('.annotation-header-data-title').text();
+            var comment = card.find('.annotation-body-text').text();
+
+            // get title and comment from form
+            var newTitle = $('#annotation-edit-form-title').val();
+            var newComment = $('#annotation-edit-form-comment').val();
+
+            // compare new and old card content
+            if (title !== newTitle || comment !== newComment) {
+
+                // build patch request
+                var annotationPatchRequest = {
+                    title: newTitle,
+                    comment: newComment
+                };
+                // send alter request to server
+                alterAnnotation(id, annotationPatchRequest, function (response) {
+                    // send altered annotation to websocket
+                    send("EDIT", id);
+
+                    // alter the annotation card
+                    card.find('.annotation-header-data-title').text(newTitle);
+                    card.find('.annotation-body-text').text(newComment);
+
+                    // handle drop down button
+                    showAndHideToggleButton();
+
+                    // hide and clear the modal
+                    $('#annotation-edit-modal').modal('hide');
+                })
+            }
         }
     });
-}
 
-/**
- * DELETE: Delete an annotation from database
- *
- * @param id The annotation id
- */
-function deleteAnnotation(id) {
-    var url = "http://localhost:8080/rest/annotations/" + id;
-    $.ajax({
-        url: url,
-        type: "DELETE",
-        dataType: "json",
-        success: function (response) {
-            // Nothing to do
-        }
+    /**
+     * Delete an annotation from list and server
+     */
+    $('#btnDelete').click(function () {
+        // get id from edit modal
+        var id = $('#annotation-edit-modal').data('id');
+
+        // delte annotation from server and from list
+        deleteAnnotation(id, function () {
+            // send delete request to websocket
+            send("DELETE", id);
+            // remove annotation from list
+            $('#' + id).closest('.listelement').remove()
+            // remove highlighted text
+            deleteHighlightedText();
+
+            // hide and clear the modal
+            $('#annotation-edit-modal').modal('hide');
+        })
     });
-}
 
-/**
- * GET: Get all annotations from database for a specific target
- *
- *
- * @param targetId The target id
- * @param responseHandler The response handler
- */
-function getAnnotations(targetId, responseHandler) {
-    var url = "http://localhost:8080/rest/annotations/target/" + targetId;
-    $.ajax({
-        url: url,
-        type: "GET",
-        dataType: "json",
-        success: function (response) {
-            // sort the responding annotations by timestamp (DESC)
-            response.sort(function (a, b) {
-                return a.timestamp - b.timestamp;
-            });
-            // handle the response
-            responseHandler(response);
-        }
+    /**
+     * Clear the title and comment input field of the create modal
+     */
+    $('#annotation-create-modal').on('hidden.bs.modal', function(){
+        // clear title
+        $('#annotation-form-title').val('');
+        // clear comment
+        $('#annotation-form-comment').val('')
+    });
+
+    /**
+     * Clear the title and comment input field of the edit modal
+     */
+    $('#annotation-edit-modal').on('hidden.bs.modal', function(e){
+        // clear title
+        $('#annotation-edit-form-title').val('');
+        // clear comment
+        $('#annotation-edit-form-comment').val('')
     });
-}
+
+    documentText = $('#documentText').html();
+
+    // fetch annotations from server on page start
+    getAnnotations(targetId, function (response) {
+        // iterate over annotations and display each
+        $.each(response, function (i, annotation) {
+            displayAnnotation(annotation);
+        })
+        // handle drop down button
+        showAndHideToggleButton();
+    });
+
+});
 
 /**
- * Delete annotation from list
- *
- * @param elem The parent li element
- * @param id The id of the annotation
+ * This will be called on page resize
  */
-function deleteAnnotationHandler(elem, id) {
-    // remove annotation from list
-    elem.remove()
-    // remove highlighted text
-    deleteHighlightedText();
-    // remove annotation from database
-    deleteAnnotation(id)
-}
+$( window ).resize(function() {
+    // handle drop down button for every annotation
+    showAndHideToggleButton();
+});
 
 /**
  * Display annotation in the list
@@ -178,7 +232,7 @@ function displayAnnotation(annotation) {
     // fetch list of annotations
     var list = $('#annotations')
 
-    var deleteIcon = "fas fa-trash";
+    var editIcon = "fas fa-edit";
     var dateIcon = "fas fa-calendar";
     if (isTimestampToday(annotation.timestamp)) {
         dateIcon = "fas fa-clock";
@@ -186,44 +240,52 @@ function displayAnnotation(annotation) {
 
     // insert annotation card
     list.prepend(
+        // list element
         $('<li>')
             .attr('class', 'listelement')
             .append(
+                // annotation card
                 $('<div>').attr('class', 'annotation-card')
+                    .attr('id', annotation.id)
                     .mouseenter(function () {
-                        $(this).children('.annotation-header').css('background-color', getDarkUserColor(annotation.userId));
+                        $(this).children('.annotation-header').css('background-color', getDarkUserColor(annotation.userToken));
                     })
                     .mouseleave(function () {
-                        $(this).children('.annotation-header').css('background-color', getUserColor(annotation.userId));
+                        $(this).children('.annotation-header').css('background-color', getUserColor(annotation.userToken));
                     })
                     .append(
+                        // annotation header
                         $('<div>').attr('class', 'annotation-header')
-                            .css('background-color', getUserColor(annotation.userId))
+                            .css('background-color', getUserColor(annotation.userToken))
                             .append(
-                                $('<div>').attr('class', 'annotation-header-title')
+                                // header data
+                                $('<div>').attr('class', 'annotation-header-data')
                                     .append(
+                                        // user
                                         $('<div>').attr('class', 'overflow-hidden')
                                             .append(
                                                 $('<i>').attr('class', 'fas fa-user')
                                             )
                                             .append(
-                                                $('<span>').append(annotation.userId)
+                                                $('<span>').append(annotation.userToken)
                                             )
                                     )
                                     .append(
+                                        // title
                                         $('<div>').attr('class', 'overflow-hidden')
                                             .append(
                                                 $('<i>').attr('class', 'fas fa-bookmark')
                                             )
                                             .append(
-                                                $('<span>').append('title' + annotation.userId)
+                                                $('<span>').attr('class', 'annotation-header-data-title').append(annotation.body.title)
                                             )
                                     )
                             )
                             .append(
+                                // unfold button
                                 $('<div>').attr('class', 'annotation-header-toggle')
                                     .click(function () {
-                                        toggleButtonHandler($(this));
+                                        toggleButtonHandler(annotation.id);
                                     })
                                     .append(
                                         $('<i>').attr('class', 'fas fa-chevron-down')
@@ -231,28 +293,32 @@ function displayAnnotation(annotation) {
                             )
                     )
                     .append(
+                        // annotation body
                         $('<div>').attr('class', 'annotation-body')
                             .append(
-                                $('<p>').attr('class', 'overflow-hidden').append(annotation.body)
+                                $('<p>').attr('class', 'overflow-hidden annotation-body-text').append(annotation.body.comment)
                             )
                     )
                     .append(
+                        // annotation footer
                         $('<div>').attr('class', 'annotation-footer')
                             .append(
+                                // edit
                                 function () {
-                                    if (userId == annotation.userId) {
-                                        return $('<div>').attr('class', 'annotation-footer-delete')
+                                    if (userToken == annotation.userToken) {
+                                        return $('<div>').attr('class', 'annotation-footer-edit')
                                             .append(
-                                                $('<i>').attr('class', deleteIcon)
+                                                $('<i>').attr('class', editIcon)
                                             )
                                             .click(function () {
-                                                deleteAnnotationHandler($(this).closest('li'), annotation.id)
+                                                editAnnotationHandler(annotation.id)
                                             })
                                     }
                                 }
                             )
                             .append(
-                                $('<div>').attr('class', 'annotation-footer-date overflow-hidden')
+                                // timestamp
+                                $('<div>').attr('class', 'flex-one overflow-hidden')
                                     .append(
                                         $('<i>').attr('class', dateIcon)
                                     )
@@ -266,7 +332,7 @@ function displayAnnotation(annotation) {
             )
             .data('annotation', annotation)
             .mouseenter(function () {
-                addHighlightedText(annotation.startCharacter, annotation.endCharacter, annotation.userId);
+                addHighlightedText(annotation.body.startCharacter, annotation.body.endCharacter, annotation.userToken);
             })
             .mouseleave(function () {
                 deleteHighlightedText();
@@ -284,11 +350,11 @@ function displayAnnotation(annotation) {
  *
  * @param startCharacter The offset of the start character
  * @param endCharacter The offset of the end character
- * @param userId The user id
+ * @param userToken The user token
  */
-function addHighlightedText(startCharacter, endCharacter, userId) {
+function addHighlightedText(startCharacter, endCharacter, userToken) {
     // create <span> tag with the annotated text
-    var replacement = $('<span></span>').css('background-color', getUserColor(userId)).html(documentText.slice(startCharacter, endCharacter));
+    var replacement = $('<span></span>').css('background-color', getUserColor(userToken)).html(documentText.slice(startCharacter, endCharacter));
 
     // wrap an <p> tag around the replacement, get its parent (the <p>) and ask for the html
     var replacementHtml = replacement.wrap('<p/>').parent().html();
@@ -327,39 +393,39 @@ function getSelectedText() {
 /**
  * Get color based on user id
  *
- * @param userId The id of the user
+ * @param userToken The id of the user
  * @returns {string} The user color
  */
-function getUserColor(userId) {
-    // insert new color if there is no userId key
-    if (userColors.get(userId) == null) {
-        generateRandomColor(userId);
+function getUserColor(userToken) {
+    // insert new color if there is no userToken key
+    if (userColors.get(userToken) == null) {
+        generateRandomColor(userToken);
     }
     // return the color
-    return userColors.get(userId);
+    return userColors.get(userToken);
 }
 
 /**
  * Get dark color based on user id
  *
- * @param userId The id of the user
+ * @param userToken The token of the user
  * @returns {string} The dark user color
  */
-function getDarkUserColor(userId) {
-    // insert new color if there is no userId key
-    if (userColorsDark.get(userId) == null) {
-        generateRandomColor(userId);
+function getDarkUserColor(userToken) {
+    // insert new color if there is no userToken key
+    if (userColorsDark.get(userToken) == null) {
+        generateRandomColor(userToken);
     }
     // return the color
-    return userColorsDark.get(userId);
+    return userColorsDark.get(userToken);
 }
 
 /**
  * Generate a random color of the format 'rgb(r, g, b)'
  *
- * @param userId The given user id
+ * @param userToken The given user token
  */
-function generateRandomColor(userId) {
+function generateRandomColor(userToken) {
     var r = Math.floor(Math.random()*56)+170;
     var g = Math.floor(Math.random()*56)+170;
     var b = Math.floor(Math.random()*56)+170;
@@ -370,8 +436,8 @@ function generateRandomColor(userId) {
     var color = 'rgb(' + r + ',' + g + ',' + b + ')';
     var colorDark = 'rgb(' + r_d + ',' + g_d + ',' + b_d + ')';
 
-    userColors.set(userId, color);
-    userColorsDark.set(userId, colorDark);
+    userColors.set(userToken, color);
+    userColorsDark.set(userToken, colorDark);
 }
 
 /**
@@ -386,29 +452,27 @@ function timestampToReadableTime(timestamp) {
     // declare response
     var responseTimestamp;
 
+    // get hours from date
+    var hours = "0" + annotationDate.getHours();
+    // get minutes from date
+    var minutes = "0" + annotationDate.getMinutes();
+
     // if annotation is from today
     if (isTimestampToday(timestamp)) {
-        // get hours from date
-        var hours = annotationDate.getHours();
-        // get minutes from date
-        var minutes = "0" + annotationDate.getMinutes();
-        // get seconds from date
-        // var seconds = "0" + annotationDate.getSeconds();
-
-        // build readable timestamp
-        responseTimestamp = hours + ":" + minutes.substr(-2);
+        // build readable timestamp in format HH:mm
+        responseTimestamp = hours.substr(-2) + ":" + minutes.substr(-2);
     }
     // else annotation is not from today
     else {
         // get date
-        var date = annotationDate.getDate();
+        var date = "0" + annotationDate.getDate();
         // get month
-        var month = annotationDate.getMonth();
+        var month = "0" + annotationDate.getMonth();
         // get year
-        var year = annotationDate.getFullYear();
+        var year = "" + annotationDate.getFullYear();
 
-        // build readable timestamp
-        responseTimestamp = date + "." + month + "." + year;
+        // build readable timestamp dd.MM.yy HH:mm
+        responseTimestamp = date.substr(-2) + "." + month.substr(-2) + "." + year.substr(-2) + " " + hours.substr(-2) + ":" + minutes.substr(-2);
     }
 
     return responseTimestamp;
@@ -438,19 +502,141 @@ function isTimestampToday(timestamp) {
 /**
  * Toggle between the toggle button status
  *
- * @param element The given toggle button
+ * @param id The id of the clicked annotation
  */
-function toggleButtonHandler(element) {
+function toggleButtonHandler(id) {
+    // the clicked annotation card
+    var card = $('#' + id);
     // open and close annotation text
-    element.parent().siblings(".annotation-body").children("p").toggleClass("overflow-hidden");
+    card.find(".annotation-body").children("p").toggleClass("overflow-hidden");
     // toggle between up and down button
-    element.children("i").toggleClass("fa-chevron-down fa-chevron-up")
+    card.find('.annotation-header-toggle').children("i").toggleClass("fa-chevron-down fa-chevron-up")
 }
 
-/*
-    MOCKUP FUNCTIONS
+/**
+ * Save a new annotation in database and list
+ *
+ * @param title The title of the new annotation
+ * @param comment The comment of the new annotation
+ * @param startCharacter The startCharacter based on the annotated text
+ * @param endCharacter The endCharacter based on the annotated text
  */
-function randomUserId() {
-    return Math.floor((Math.random() * 12) + 1);;
+function saveNewAnnotation(title, comment, startCharacter, endCharacter) {
+    // build annotationPostRequest
+    var annotationPostRequest = {
+        userToken: userToken,
+        targetId: targetId,
+        body: {
+            title: title,
+            comment: comment,
+            startCharacter: startCharacter,
+            endCharacter: endCharacter
+        }
+    };
+
+    // send new annotation to back-end and display it in list
+    createAnnotation(annotationPostRequest, function(response) {
+        // send new annotation to websocket
+        send("CREATE", response.id);
+        // display the new annotation
+        displayAnnotation(response);
+
+    });
+}
+
+/**
+ * Open edit modal with title and comment from given card
+ *
+ * @param id The id of the clicked annotation
+ */
+function editAnnotationHandler(id) {
+    // the clicked annotation card
+    var card = $('#' + id);
+    // get title and comment
+    var title = card.find('.annotation-header-data-title').text();
+    var comment = card.find('.annotation-body-text').text();
+
+    // set title and comment
+    $('#annotation-edit-form-title').val(title);
+    $('#annotation-edit-form-comment').val(comment);
+
+    // display annotation edit modal and pass id
+    $('#annotation-edit-modal').data('id', id).modal("show");
+}
+
+/**
+ * Change title and comment from annotation by given annotation
+ *
+ * @param annotation The given altered annotation
+ */
+function editAnnotationValues(annotation) {
+    // find annotation
+    var annotationElement =  $('#' + annotation.id);
+
+    // set title and comment
+    annotationElement.find('.annotation-header-data-title').text(annotation.body.title);
+    annotationElement.find('.annotation-body-text').text(annotation.body.comment);
+
+    // handle drop down button
+    showAndHideToggleButtonById(annotation.id);
+}
+
+/**
+ * Show or hide the drop down button for every annotation card.
+ * Call this on page resize and after annotations GET
+ */
+function showAndHideToggleButton() {
+    // iterate over each annotation card
+    $('#annotations').find('li').each(function () {
+
+        // find the comment element, clone and hide it
+        var comment = $(this).find('.annotation-body').children('p');
+        var clone = comment.clone()
+            .css({display: 'inline', width: 'auto', visibility: 'hidden'})
+            .appendTo('body');
+        var cloneWidth = clone.width();
+
+        // remove the element from the page
+        clone.remove();
+
+        // show drop down button only if text was truncated
+        if(cloneWidth > comment.width()) {
+            $(this).find('.annotation-header-toggle').show();
+            $(this).find('.annotation-header-data').css('width', 'calc(100% - 40px)');
+        }
+        else {
+            $(this).find('.annotation-header-toggle').hide();
+            $(this).find('.annotation-header-data').css('width', '100%');
+        }
+
+    })
 }
 
+/**
+ * Show or hide the drop down button for a given annotation card.
+ *
+ * @param id The id of the annotation
+ */
+function showAndHideToggleButtonById(id) {
+    // find annotation
+    var annotationElement =  $('#' + id);
+    // find the comment element, clone and hide it
+    var comment = annotationElement.find('.annotation-body').children('p');
+    var clone = comment.clone()
+        .css({display: 'inline', width: 'auto', visibility: 'hidden'})
+        .appendTo('body');
+    var cloneWidth = clone.width();
+
+    // remove the element from the page
+    clone.remove();
+
+    // show drop down button only if text was truncated
+    if(cloneWidth > comment.width()) {
+        annotationElement.find('.annotation-header-toggle').show();
+        annotationElement.find('.annotation-header-data').css('width', 'calc(100% - 40px)');
+    }
+    else {
+        annotationElement.find('.annotation-header-toggle').hide();
+        annotationElement.find('.annotation-header-data').css('width', '100%');
+    }
+}
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/annotationWebsocket.js b/gemeinsamforschen/src/main/webapp/assets/js/annotationWebsocket.js
new file mode 100644
index 0000000000000000000000000000000000000000..62bbd2f33c69daada2c18e08614c9ab718ad6c00
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/assets/js/annotationWebsocket.js
@@ -0,0 +1,39 @@
+var ws;
+
+function connect(targetId) {
+    var host = document.location.host;
+    var pathname = document.location.pathname;
+
+    ws = new WebSocket("ws://" + host  + "/ws/annotation/" + targetId);
+
+    ws.onmessage = function (e) {
+        var message = JSON.parse(e.data);
+        console.log(message.from)
+
+        if (message.type === "CREATE") {
+            // get annotation from server
+            getAnnotation(message.annotationId, function (response) {
+                // display annotation
+                displayAnnotation(response)
+            })
+        }
+        else if (message.type === "DELETE") {
+            // remove annotation from list
+            $('#' + message.annotationId).closest('.listelement').remove()
+        }
+        else if (message.type === "EDIT") {
+            getAnnotation(message.annotationId, function (response) {
+                editAnnotationValues(response);
+            })
+        }
+    };
+}
+
+function send(type, annotationId) {
+    var json = JSON.stringify({
+        "type":type,
+        "annotationId":annotationId
+    })
+
+    ws.send(json);
+}
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js b/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js
index 743de6b60c639819d73547e300b8d46bd6b3b564..7e1ecd5f3739c8745360530f2ef5ab5e60823c0a 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js
@@ -18,7 +18,7 @@ $(document).ready(function () {     //todo: paths should be relative
             {
                 "studentIdentifier": {
                     "projectId": "projekt",
-                    "studentId": "Keiler"
+                    "studentId": "student"
                 },
                 "quizAnswer": [
                     1,
@@ -28,38 +28,36 @@ $(document).ready(function () {     //todo: paths should be relative
                     1,
                     0
                 ],
-                "feedback": "toller dude",
-                "workRating": [
-                    5,
-                    4,
-                    3,
-                    2,
-                    1,
-                    0
-                ]
+                "feedback": "ein toller typ",
+                "workRating": {
+                    "responsibility": 1,
+                    "partOfWork": 1,
+                    "autonomous": 1,
+                    "communication": 1,
+                    "cooperation": 1
+                }
             },
             {
                 "studentIdentifier": {
                     "projectId": "projekt",
-                    "studentId": "Glucke"
+                    "studentId": "student"
                 },
                 "quizAnswer": [
                     1,
-                    1,
+                    0,
                     1,
                     1,
                     1,
                     0
                 ],
-                "feedback": "super",
-                "workRating": [
-                    1,
-                    1,
-                    1,
-                    2,
-                    3,
-                    2
-                ]
+                "feedback": "feini feini",
+                "workRating": {
+                    "responsibility": 3,
+                    "partOfWork": 4,
+                    "autonomous": 4,
+                    "communication": 3,
+                    "cooperation": 5
+                }
             }
         ];
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js b/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js
index 7a5dba5aafdd669caacaef14fc31b945f8665016..aa38ac04b24c6f0434bb9b09393cb65464f9e51a 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/createJournal.js
@@ -1,34 +1,31 @@
-function getQueryVariable(variable)
-{
-    var query = window.location.search.substring(1);
-    var vars = query.split("&");
-    for (var i=0;i<vars.length;i++) {
-        var pair = vars[i].split("=");
-        if(pair[0] == variable){return pair[1];}
-    }
-    return(false);
-}
+var student = getQueryVariable("token");
+var project = getQueryVariable("projectId");
 
 $(document).ready(function() {
+    $('#student').val(student);
+    $('#project').val(project);
+
     $('#backLink').on('click', function(){
-        location.href="eportfolio.jsp?token="+getUserTokenFromUrl();
+        location.href = "eportfolio.jsp?token=" + student + "&projectId=" + project;
     });
 
     var journalID = getQueryVariable("journal");
     console.log(journalID);
     if(journalID){
+
         $.ajax({
             url: "../rest/journal/"+journalID
         }).then(function(data) {
             $('#editor').append(data.entryMD);
 
             //TODO preselet in select tags
+
             new InscrybMDE({
                 element: document.getElementById("editor"),
                 spellChecker: false,
                 forceSync: true,
             });
-
+            $('#journalid').val(journalID);
             console.log(data);
 
         });
@@ -38,6 +35,8 @@ $(document).ready(function() {
             spellChecker: false,
             forceSync: true,
         });
+
+        $('#journalid').val("0");
     }
 
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/createQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/createQuiz.js
index 764a7a90dfd06ce45531d359c31d592b3a39c0f7..b8e097d0a5e1ae22d441c4cc3ac79d3d04c21ab6 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/createQuiz.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/createQuiz.js
@@ -1,5 +1,71 @@
 $(document).ready(function () {
+    $('#addCorrectAnswer').on('click', function(){
+        var divCorrectAnswer = document.getElementById('correctAnswers');
+        var i = divCorrectAnswer.children.length;
+        var inputCorrectAnswer = document.createElement('INPUT');
+        inputCorrectAnswer.id='correctAnswer'+i;
+        divCorrectAnswer.appendChild(inputCorrectAnswer);
+    });
+
+    $('#addIncorrectAnswer').on('click', function(){
+        var divIncorrectAnswer = document.getElementById('incorrectAnswers');
+        var i = divIncorrectAnswer.children.length;
+        var inputIncorrectAnswer = document.createElement('INPUT');
+        inputIncorrectAnswer.id='incorrectAnswer'+i;
+        divIncorrectAnswer.appendChild(inputIncorrectAnswer);
+    });
+
+    $('#deleteCorrectAnswer').on('click', function(){
+        var divCorrectAnswer = document.getElementById('correctAnswers');
+        divCorrectAnswer.removeChild(divCorrectAnswer.lastChild);
+    });
+
+    $('#deleteIncorrectAnswer').on('click', function(){
+        var divIncorrectAnswer = document.getElementById('incorrectAnswers');
+        divIncorrectAnswer.removeChild(divIncorrectAnswer.lastChild);
+    });
+
     $("#save").on('click', function () {
-        document.location = "Quiz.jsp?token=" + getUserTokenFromUrl();
+        var correctAnswers= [];
+        var incorrectAnswers= [];
+        var shuttleList = document.getElementById('correctAnswers');
+        for (var i=0; i<shuttleList.children.length; i++)
+        {
+            correctAnswers.push(shuttleList.children[i].value.trim())
+        }
+        shuttleList = document.getElementById('incorrectAnswers');
+        for (i=0; i<shuttleList.children.length; i++)
+        {
+            incorrectAnswers.push(shuttleList.children[i].value.trim())
+        }
+        var quiz = {
+            question: $('#question').val().trim(),
+            type: 'mc',
+            correctAnswers: correctAnswers,
+            incorrectAnswers: incorrectAnswers
+        };
+        var studentIdentifier = {
+            studentId: $('#user').html().trim(),
+            projectId: $('#projectId').html().trim()
+        };
+        var data = JSON.stringify({
+            studentIdentifier: studentIdentifier,
+            quiz: quiz
+        });
+        $.ajax({
+            data: data,
+            url: '../rest/assessments/quiz',
+            headers: {
+                "Content-Type": "application/json",
+                "Cache-Control": "no-cache"
+            },
+            type: 'POST',
+            success: function(){
+                location.href="Quiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
+        },
+        error: function(a){
+
+        }
+        });
     });
 });
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js b/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js
index 658ed766e9a605fa961f40420cebbfeeeee51e4d..7ec0e356f132d559afe80381f3bd10cd1f7f79fb 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/e-portfolio.js
@@ -1,22 +1,22 @@
-//TODO Get student and project form context
+var student = getQueryVariable("token");
+var project = getQueryVariable("projectId");
+var description = 0;
 
 $(document).ready(function() {
-    $('#editDescriptionLink').on('click', function(){
-        /*TODO getJournal*/
-        location.href="editDescription.jsp?project=0&token="+getUserTokenFromUrl();
-    });
-
-    $('#createJournalLink').on('click', function(){
-        location.href="createJournal.jsp?token="+getUserTokenFromUrl();
-    });
-
     $.ajax({
-        url: "../rest/projectdescription/0"
+        url: "../rest/projectdescription/" + project + "/" + student
     }).then(function(data) {
-        $('.journal-description-title').append('<h2>' + data.name + '</h2>');
+        console.log("desc: " + data);
+        description = data.id;
+        $('#projectdescriptionId').val(description);
+
+        if (!data.open){
+            $("#description-edit").remove();
+        }
         $('.journal-description-text').append(data.descriptionHTML);
-        for(var link in data.links){
-            $('.journal-description-links').append('<button class="btn btn-default btn-xs" onclick=\'linkLoeschen("'+link+'")\'> <i class="fa fa-trash" aria-hidden="true" ></i></button><a href=\' + data.links[link] + \'>' + link + '</a> <br/>');
+        for(var ii in data.links){
+            console.log(data.links[ii])
+            $('.journal-description-links').append('<button class="btn btn-default btn-xs" onclick=\'linkLoeschen("'+data.links[ii].id +'")\'> <i class="fa fa-trash" aria-hidden="true" ></i></button><a href=' + data.links[ii].link + '>' + data.links[ii].name + '</a> <br/>');
         }
         $('.journal-description-links').append('<button type="button" class="btn btn-default btn-xs" data-toggle="modal" data-target="#addLinkModal"><i class="fa fa-plus" aria-hidden="true"></i></button>');
 
@@ -24,18 +24,36 @@ $(document).ready(function() {
             $('.journal-description-group').append(data.group[g]+ '<br/>');
 
         }
+
+
         console.log(data);
     });
 
+
     $.ajax({
-        url: "../rest/journal//journals/0/0"
+        url: "../rest/journal/journals/" + student + "/" + project + "/ALL"
     }).then(function(data) {
         loadJournals(data);
         console.log(data);
     });
 
+    $('#editDescriptionLink').on('click', function () {
+        location.href = "editDescription.jsp?project=" + project + "&token=" + student + "&projectId=" + project;
+    });
+
+    $('#createJournalLink').on('click', function () {
+        location.href = "createJournal.jsp?token=" + student + "&projectId=" + project;
+    });
+
+});
+
+$(document).on("click", ".open-CloseJournalDialog", function () {
+    var journalID = $(this).data('id');
+    console.log("on:" + $(this).data('id'));
+    $('#journalID-input').val(journalID);
 });
 
+
 function timestampToDateString(timestamp) {
     var date = new Date(timestamp);
     return date.toLocaleString("de-DE");
@@ -43,11 +61,11 @@ function timestampToDateString(timestamp) {
 
 function filterJournals() {
     var filter = $( '#journalfilter option:selected' ).val();
-
+    project = getQueryVariable("projectId");
     $('.journal').empty();
 
     $.ajax({
-        url: "../rest/journal//journals/0/0/"+filter
+        url: "../rest/journal/journals/" + student + "/" + project + "/" + filter
     }).then(function(data) {
         loadJournals(data);
         console.log(data);
@@ -58,77 +76,89 @@ function filterJournals() {
 
 function loadJournals(data) {
     for (var journal in data) {
-        $('.journal').append(
-            '<div class="journal-container">' +
-                '<div class="journal-avatar">' +
-                  'getBild' +
-                '</div>' +
-                '<div class="journal-date"> ' +
-                     timestampToDateString(data[journal].timestamp) +
-                '</div>' +
-                '<div class="journal-name">' +
-                    data[journal].creator +
-                '</div>' +
-                '<div class="journal-category">' +
-                    data[journal].category +
-                '</div>' +
-                '<div class="journal-edit" align="right">' +
-                    '<a class="btn btn-default btn-sm" href="createJournal.jsp?token='+getUserTokenFromUrl()+'&journal=' + data[journal].id + '"><i class="fa fa-pencil"></i> Bearbeiten</a>' +
-                    '<a class="btn btn-default btn-sm" data-toggle="modal" data-target="#closeJournalModal"><i class="fa fa-check-square" aria-hidden="true"></i>Abschlie&szlig;en</a>' +
-                '</div>' +
-                '<div class="journal-text">' +
-                    data[journal].entryHTML +
-                '</div>' +
-            '</div><br><br>')
-    }};
+        var journalString = '<div class="journal-container">' +
+            '<div class="journal-avatar">' +
+            'getBild' +
+            '</div>' +
+            '<div class="journal-date"> ' +
+            timestampToDateString(data[journal].timestamp) +
+            '</div>' +
+            '<div class="journal-name">' +
+            // TODO id to name
+            data[journal].studentIdentifier.studentId +
+            '</div>' +
+            '<div class="journal-category">' +
+            data[journal].category +
+            '</div>' +
+            '<div class="journal-edit" align="right">';
+
+        //TODO userToken...
+        if (data[journal].studentIdentifier.studentId == student && data[journal].open) {
+            journalString = journalString +
+                '<a class="btn btn-default btn-sm" href="createJournal.jsp?token=' + student + '&projectId=' + project + '&journal=' + data[journal].id + '"><i class="fa fa-pencil"></i> Bearbeiten</a>' +
+                '<a class="open-CloseJournalDialog btn btn-default btn-sm" data-toggle="modal" data-id ='
+                + data[journal].id +
+                ' data-target ="#closeJournalModal" > <i class="fa fa-check-square" aria-hidden = "true" ></i> Abschlie&szlig;en</a> '
+        }
+
+        journalString = journalString + '</div>' +
+            '<div class="journal-text">' +
+            data[journal].entryHTML +
+            '</div>' +
+            '</div><br><br>';
 
+        $('.journal').append(journalString)
+    }};
 
-function linkLoeschen(name) {
-    console.log("löschen" + name);
+function linkLoeschen(id) {
+    console.log("löschen" + id);
     $.ajax({
         type: "POST",
         url: "../rest/projectdescription/deleteLink",
-        data: JSON.stringify(name),
+        data: id,
         contentType: "application/json; charset=utf-8",
         crossDomain: true,
         dataType: "json",
         success: function (data, status, jqXHR) {
 
-            alert(success);
         }
     });
-
+    location.reload();
 }
 
-function closeJournal(journal) {
-    console.log("löschen" + journal);
+function closeJournal() {
+    //TODO reload when modal close
+    var journalID = $('#journalID-input').val();
+    console.log("schließe=" + journalID);
+
     $.ajax({
         type: "POST",
         url: "../rest/journal/close",
-        data: JSON.stringify(journal),
+        data: journalID,
         contentType: "application/json; charset=utf-8",
         crossDomain: true,
-        dataType: "json",
+        dataType: "text",
         success: function (data, status, jqXHR) {
+            console.log("succ");
+            filterJournals();
 
-            alert(success);
         }
     });
-
 }
 
-function closeJournal(description) {
-    console.log("löschen" + description);
+function closeDescription() {
+    console.log("schließe=" + description);
+
     $.ajax({
         type: "POST",
         url: "../rest/projectdescription/close",
-        data: JSON.stringify(description),
+        data: description,
         contentType: "application/json; charset=utf-8",
         crossDomain: true,
-        dataType: "json",
+        dataType: "text",
         success: function (data, status, jqXHR) {
-
-            alert(success);
+            console.log("succ");
+            location.reload();
         }
     });
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/editDescription.js b/gemeinsamforschen/src/main/webapp/assets/js/editDescription.js
index 77eeb04452f089e8369c9b75875eaa3ee2fe4b8b..c664f15fcd3b757da953215a19f3ed09f40fe49b 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/editDescription.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/editDescription.js
@@ -1,21 +1,28 @@
+var student = getQueryVariable("token");
+var project = getQueryVariable("projectId");
+
+
 $(document).ready(function() {
+    $('#student').val(student);
+    $('#project').val(project);
+
     $('#backLink').on('click', function(){
-        location.href="eportfolio.jsp?token="+getUserTokenFromUrl();
+        location.href = "eportfolio.jsp?token=" + student + "&projectId=" + project;
     });
 
     $.ajax({
-        url: "../rest/projectdescription/0"
-        }).then(function(data) {
-            $('#editor').append(data.descriptionMD);
+        url: "../rest/projectdescription/" + student + "/" + project
+    }).then(function (data) {
+        $('#editor').append(data.descriptionMD);
 
-            //TODO preselet in select tags
-            new InscrybMDE({
-                element: document.getElementById("editor"),
-                spellChecker: false,
-                forceSync: true,
-            });
+        //TODO preselet in select tags
+        new InscrybMDE({
+            element: document.getElementById("editor"),
+            spellChecker: false,
+            forceSync: true,
+        });
 
-            console.log(data);
+        console.log(data);
 
     });
 })
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js
index 7cefb9d460fc4665b58ae33f96bed4267a86b0bb..a56e8a766a20f895dd8674056e796e5613bbc5b0 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js
@@ -1,4 +1,5 @@
 $(document).ready(function() {
+    $('#notAllRated').hide();
     $(".carousel").carousel({
         interval: false
     });
@@ -7,25 +8,40 @@ $(document).ready(function() {
     });
 });
 
-function getUser(){//todo: you can see what you need to do
-    return "dummy";
-}
-
 function assessPeer(){
-    var peerRating = {
-        "fromPeer": getUser(),
-        "toPeer": "",
-        "workRating": []
-    };
-    var dataP = [];
-    var peerStudents =$('.peerStudent');
-    for (var i=0; i< peerStudents.length; i++){
-        peerRating.toPeer = peerStudents[i].id;
-        peerRating.workRating = [5,4,3,2]
+    let peerStudents =$('.peerStudent');
+    ///////initialize variables///////
+    let dataP = new Array(peerStudents.size());
+    let rateThis = ['responsibility','partOfWork','cooperation','communication','autonomous'];
+
+    ///////read values from html///////
+    for (let peer=0; peer< peerStudents.length; peer++){
+        let workRating = {};
+        let peerRating = {
+            "fromPeer": $('#user').html().trim(),
+            "toPeer": peerStudents[peer].id,
+            "workRating": {}
+        };
+        for (let rate=0; rate<rateThis.length; rate++ ){
+            let category = rateThis[rate];
+            workRating[category]=($('input[name='+rateThis[rate]+peerStudents[peer].id+']:checked').val());
+        }
+
+        peerRating.workRating = workRating;
+        //////write values in Post-Variable
+        dataP[peer]=peerRating;
+    }
+    for (let peer=0; peer< dataP.length; peer++){
+        for (let workRating=0; workRating<rateThis.length;workRating++){
+            if(dataP[peer].workRating[rateThis[workRating]]===undefined){
+                $('#notAllRated').show();
+                return;
+            }
+        }
     }
-    dataP.push(peerRating);
+    let projectId=$('#projectId').html().trim();
     $.ajax({
-        url:'../rest/assessments/peer/project/1/group/1',
+        url:'../rest/assessments/peerRating/project/'+projectId,
         type: 'POST',
         headers: {
             "Content-Type": "application/json",
@@ -33,7 +49,7 @@ function assessPeer(){
         },
         data: JSON.stringify(dataP),
         success: function(){
-            location.href="takeQuiz.jsp?token="+getUserTokenFromUrl();
+            location.href="takeQuiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
         },
         error: function(a,b,c){
 
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js b/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js
index 0bd803d816901c10c4bb47c9ecc6ecf281f7d543..77cd2693f2740cc2cb0a36e504271eecae90310e 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js
@@ -1,9 +1,9 @@
 $(document).ready(function(){
     $('#project1Link').on('click', function(){
-        location.href="project-docent.jsp?token="+getUserTokenFromUrl();
+        location.href="project-docent.jsp?token="+getUserTokenFromUrl()+'&projectId='+'gemeinsamForschen';
     });
     $('#project2Link').on('click', function(){
-        location.href="project-docent.jsp?token="+getUserTokenFromUrl();
+        location.href="project-docent.jsp?token="+getUserTokenFromUrl()+'&projectId='+'Kaleo';
     });
     $('#createProject').on('click', function(){
         location.href="createProject.jsp?token="+getUserTokenFromUrl();
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js b/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js
index 2cf207efe43ac69de868491e3264e78c837b0e9c..898f3f5e00183d9549a84cb5c3028be9aa7f5bd6 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js
@@ -1,6 +1,9 @@
 $(document).ready(function(){
     $('#project1Link').on('click', function(){
-        location.href="project-student.jsp?token="+getUserTokenFromUrl();
+        location.href="project-student.jsp?token="+getUserTokenFromUrl()+'&projectId='+'gemeinsamForschen';
+    });
+    $('#project2Link').on('click', function(){
+        location.href="project-student.jsp?token="+getUserTokenFromUrl()+'&projectId='+'Kaleo';
     });
     $('#enrollProject').on('click', function(){
         location.href="enrollProject.jsp?token="+getUserTokenFromUrl();
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js b/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js
index 8d6c7c7b53d0fd8323dd23e2abea8d79c298954c..b7e3c6b5fcaafd34e8c7c7066027d6d1a7d6069c 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js
@@ -1,17 +1,17 @@
 $(document).ready(function () {
-    var ejournalFeedback = new InscrybMDE({
+    new InscrybMDE({
         element: document.getElementById("ejournalFeedback"),
         spellChecker: false,
         //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"],
         minHeight: "80px",
     });
-    var presentationFeedback = new InscrybMDE({
+    new InscrybMDE({
         element: document.getElementById("presentationFeedback"),
         spellChecker: false,
         //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"],
         minHeight: "80px",
     });
-    var dossierFeedback = new InscrybMDE({
+    new InscrybMDE({
         element: document.getElementById("dossierFeedback"),
         spellChecker: false,
         //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"],
@@ -19,10 +19,41 @@ $(document).ready(function () {
     });
 
 
-    editor.style = "min-height: 100px";
+    //editor.style = "min-height: 100px";
 
 
-    $('#submit').on('click',function(){
-        document.location="project-student.jsp?token="+getUserTokenFromUrl();
+    $('#submit').on('click', function () {
+        safeContributionRating();
     });
-});
\ No newline at end of file
+});
+
+function safeContributionRating() {
+    let contributions = $('.contributionRating');
+    ///////initialize variables///////
+    let dataP = {};
+
+    ///////read values from html///////
+    for (let contribution = 0; contribution < contributions.length; contribution++) {
+        let checkbox = $("#" + contributions[contribution].id + " input:checked");
+        dataP[checkbox.attr('name')] = checkbox.val();
+    }
+    let projectId = $('#projectId').html().trim();
+    let fromPeer = $('#user').html().trim();
+    let toStudent = $('.peerStudent').attr('id');
+    $.ajax({
+        url: '../rest/assessments/contributionRating/projectId/' + projectId +
+        '/studentId/' + toStudent + '/fromPeer/' + fromPeer,
+        type: 'POST',
+        headers: {
+            "Content-Type": "application/json",
+            "Cache-Control": "no-cache"
+        },
+        data: JSON.stringify(dataP),
+        success: function () {
+            location.href = "project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + $('#projectId').html().trim();
+        },
+        error: function (a, b, c) {
+
+        }
+    });
+}
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js
index 9bc226153048dc0874087970dddf8a9965b3295e..7c293a1a125ccc891df523fd6a1ea415968a28c4 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js
@@ -1,5 +1,5 @@
 $(document).ready(function () {
-    var loading = $('#loadbar').hide();
+    let loading = $('#loadbar').hide();
     $(document)
         .ajaxStart(function () {
             loading.show();
@@ -8,7 +8,7 @@ $(document).ready(function () {
     });
 
     $("label.btn").on('click',function () {
-        var choice = $(this).find('input:radio').val();
+        let choice = $(this).find('input:radio').val();
         $('#loadbar').show();
         $('#quiz').fadeOut();
         setTimeout(function(){
@@ -21,38 +21,37 @@ $(document).ready(function () {
 
     $ans = 3;
 
-    $.fn.checking = function(ck) {
-        if (ck != $ans)
-            return 'INCORRECT';
-        else
-            return 'CORRECT';
-    };
-
+    let projectId = document.getElementById('projectId').innerText.trim();
     $.ajax({
-        url: '../rest/assessments/project/1/quiz/',
+        url: '../rest/assessments/project/'+projectId+'/quiz/',
         type: 'GET',
         success: function (data) {
-            var table = document.getElementById('tableQuiz');
-            for (var quiz = 0; quiz < data.length; quiz++){
-                var question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",","");
-                var answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers);
-                var colspan = answers.length;
-                var trQuestion = document.createElement('TR');
-                var tdQuestion = '<td colspan="' + colspan + '"' +
-                    'data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' +
+            let table = document.getElementById('tableQuiz');
+            for (let quiz = 0; quiz < data.length; quiz++){
+                let question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",","");
+                let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers);
+                let colspan = answers.length;
+                let trQuestion = document.createElement('TR');
+                let tdQuestion = '<td colspan="' + colspan + '"' +
+                    ' data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' +
                     '' + data[quiz].question + '</td>';
                 trQuestion.innerHTML = tdQuestion;
-                var trAnswers = document.createElement('TR');
+                let trAnswers = document.createElement('TR');
                 answers = shuffle(answers);
-                var answersTd='<td style="display: block;"><div class="quiz collapse" id="'+question+'" data-toggle="buttons">';
-                for (var i = 0; i < answers.length; i++) {
+                let answersTd='<td style="display: block;">' +
+                    '<div ' +
+                    'class="quiz collapse" ' +
+                    'id="'+question+'" ' +
+                    'data-toggle="buttons">' +
+                    '<p hidden>'+data[quiz].question+'</p>';
+                for (let i = 0; i < answers.length; i++) {
                     answersTd = answersTd + '<div>' +
                         '<label class="element-animation1 btn btn-lg btn-primary btn-block">' +
                         '<span class="btn-label">' +
                         '<i class="glyphicon glyphicon-chevron-right">' +
                         '</i>' +
                         '</span>' +
-                        '<input type="checkbox">' + answers[i] + '' +
+                        '<input type="checkbox" value="'+answers[i]+'">' + answers[i] + '' +
                         '</label>' +
                         '</div>';
                 }
@@ -63,17 +62,17 @@ $(document).ready(function () {
                 table.appendChild(trAnswers);
             }
         },
-        error: function (a, b, c) {
+        error: function (a) {
             alert('Fehler ' + a);
         }
     });
     $("#submitQuiz").on("click", function () {
-        document.location="rateContribution.jsp?token="+getUserTokenFromUrl();
+        safeQuizAnswers();
     });
 });
 
 function shuffle(a) {
-    var j, x, i;
+    let j, x, i;
     for (i = a.length - 1; i > 0; i--) {
         j = Math.floor(Math.random() * (i + 1));
         x = a[i];
@@ -81,4 +80,40 @@ function shuffle(a) {
         a[j] = x;
     }
     return a;
+}
+
+function safeQuizAnswers(){
+    let quizzes = $('.quiz');
+    ///////initialize variables///////
+    let dataP = {};
+
+    ///////read values from html///////
+    for (let quiz=0; quiz<quizzes.length; quiz++){
+        let answerList = [];
+        if (quizzes[quiz].id !== ""){
+            let checkedBoxes = $("#"+quizzes[quiz].id+" input:checked");
+            checkedBoxes.each(function(){
+                answerList.push($(this).val());
+            });
+            let question = $("#"+quizzes[quiz].id+" p").html().trim();
+            dataP[question]= answerList;
+        }
+    }
+    let projectId=$('#projectId').html().trim();
+    let studentId=$('#user').html().trim();
+    $.ajax({
+        url:'../rest/assessments/quizAnswer/projectId/'+projectId+'/studentId/'+studentId,
+        type: 'POST',
+        headers: {
+            "Content-Type": "application/json",
+            "Cache-Control": "no-cache"
+        },
+        data: JSON.stringify(dataP),
+        success: function(){
+            location.href="rateContribution.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
+        },
+        error: function(a,b,c){
+
+        }
+    });
 }
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/utility.js b/gemeinsamforschen/src/main/webapp/assets/js/utility.js
index bbbf0394ae1ca308e21b690477ddb39619fd9161..c5b8b37d083e2cc80f2260ded050c6c710143ade 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/utility.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/utility.js
@@ -1,3 +1,7 @@
+$(document).ready(function(){
+    $('#headLineProject').html($('#projectId').html());
+});
+
 function getUserTokenFromUrl() {
     var parts = window.location.search.substr(1).split("&");
     var $_GET = {};
@@ -9,3 +13,14 @@ function getUserTokenFromUrl() {
 
 }
 
+function getQueryVariable(variable) {
+    var query = window.location.search.substring(1);
+    var vars = query.split("&");
+    for (var i = 0; i < vars.length; i++) {
+        var pair = vars[i].split("=");
+        if (pair[0] == variable) {
+            return pair[1];
+        }
+    }
+    return (false);
+}
diff --git a/gemeinsamforschen/src/main/webapp/assets/js/viewQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/viewQuiz.js
index 362479e7371bfb8ea4637c238ec8dc0c874b3543..a763697c7dd3fc87785125d29aabcc4e7978b715 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/viewQuiz.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/viewQuiz.js
@@ -33,10 +33,11 @@ $(document).ready(function () {
         var temp = parts[i].split("=");
         $_GET[decodeURIComponent(temp[0])] = decodeURIComponent(temp[1]);
     }
-    var quizId = $_GET['quizId'];
-
+    var quizId = encodeURIComponent($_GET['quizId']);
+    var author = $('#user').html().trim();
+    var projectId = document.getElementById('projectId').innerText.trim();
     $.ajax({
-        url: '../rest/assessments/project/1/quiz/'+quizId,
+        url: '../rest/assessments/project/'+projectId+'/quiz/'+quizId+'/author/'+author,
         type: 'GET',
         success: function (data) {
             var table = document.getElementById('tableQuiz');
@@ -61,7 +62,16 @@ $(document).ready(function () {
             alert('Fehler ' + a);
         }
     });
-    $("#submitQuiz").on("click", function () {
-
+    $("#deleteQuiz").on("click", function () {
+        $.ajax({
+            url: '../rest/assessments/quiz/' + encodeURIComponent(quizId),
+            type: 'POST',
+            success: function () {
+                document.location.href="Quiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim();
+            },
+            error: function(a){
+                alert(a)
+            }
+        });
     });
 });
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld b/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld
index 3704c718e3338de67f5165d78f3d5785f983b11a..3c2db0269960c9ff430c6e6d82e74a225d195972 100644
--- a/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld
+++ b/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld
@@ -15,4 +15,28 @@
         <body-content>empty</body-content>
     </tag>
 
+    <tag>
+        <name>session</name>
+        <tag-class>unipotsdam.gf.core.session.SessionTag</tag-class>
+        <body-content>empty</body-content>
+    </tag>
+
+    <tag>
+        <name>omniDependencies</name>
+        <tag-class>unipotsdam.gf.core.management.user.omniDependencies</tag-class>
+        <body-content>empty</body-content>
+    </tag>
+
+    <tag>
+        <name>headLine</name>
+        <tag-class>unipotsdam.gf.core.management.user.headLine</tag-class>
+        <body-content>empty</body-content>
+    </tag>
+    
+    <tag>
+        <name>context</name>
+        <tag-class>unipotsdam.gf.core.session.ContextTag</tag-class>
+        <body-content>empty</body-content>
+    </tag>
+
 </taglib>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld.orig b/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld.orig
new file mode 100644
index 0000000000000000000000000000000000000000..464689080655114907b3461748349ae320db9d88
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld.orig
@@ -0,0 +1,40 @@
+<taglib>
+    <tlib-version>1.0</tlib-version>
+    <jsp-version>2.0</jsp-version>
+    <short-name>hiddenUserTag</short-name>
+
+    <tag>
+        <name>hiddenUserTag</name>
+        <tag-class>unipotsdam.gf.core.management.user.HiddenUserTag</tag-class>
+        <body-content>empty</body-content>
+    </tag>
+
+    <tag>
+        <name>menu</name>
+        <tag-class>unipotsdam.gf.core.management.user.Menu</tag-class>
+        <body-content>empty</body-content>
+    </tag>
+
+    <tag>
+<<<<<<< HEAD
+        <name>headLine</name>
+        <tag-class>unipotsdam.gf.core.management.user.headLine</tag-class>
+=======
+        <name>session</name>
+        <tag-class>unipotsdam.gf.core.session.SessionTag</tag-class>
+>>>>>>> origin/session_management
+        <body-content>empty</body-content>
+    </tag>
+
+    <tag>
+<<<<<<< HEAD
+        <name>omniDependencies</name>
+        <tag-class>unipotsdam.gf.core.management.user.omniDependencies</tag-class>
+=======
+        <name>context</name>
+        <tag-class>unipotsdam.gf.core.session.ContextTag</tag-class>
+>>>>>>> origin/session_management
+        <body-content>empty</body-content>
+    </tag>
+
+</taglib>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/Quiz-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/Quiz-docent.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..64db788d2e1fb91279b7fa9f339d33d0b232c26e
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/pages/Quiz-docent.jsp
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
+
+<html>
+<head>
+    <omniDependencies:omniDependencies/>
+    <script src="../assets/js/Quiz-docent.js"></script>
+</head>
+
+<body>
+<div id="wrapper">
+    <menu:menu/>
+    <div class="page-content-wrapper">
+        <headLine:headLine/>
+        <table class="table-striped">
+            <tbody id="tableQuiz">
+
+            </tbody>
+        </table>
+        <button class="btn btn-primary" id="newQuiz">neues Quiz</button>
+
+    </div>
+</div>
+
+</body>
+</html>
diff --git a/gemeinsamforschen/src/main/webapp/pages/Quiz.jsp b/gemeinsamforschen/src/main/webapp/pages/Quiz.jsp
index 276a9e024dcc1658c5290b3774cde54dd4029047..f5f04d45e484bec9d965916f9910f85a5fb176cf 100644
--- a/gemeinsamforschen/src/main/webapp/pages/Quiz.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/Quiz.jsp
@@ -1,45 +1,19 @@
-<%--
-  Created by IntelliJ IDEA.
-  User: fides-WHK
-  Date: 21.06.2018
-  Time: 12:37
-  To change this template use File | Settings | File Templates.
---%>
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <html>
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/Quiz.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">project1
-                <a href="#">
-                <span class="glyphicon glyphicon-envelope"
-                      style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-                </a>
-                <a href="#">
-                    <span class="glyphicon glyphicon-cog"
-                          style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-                </a></h1>
-        </div>
+        <headLine:headLine/>
         <table class="table-striped">
             <tbody id="myQuizzes">
 
diff --git a/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp b/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp
index 9f2969275d66042918a5d32cd44d1f8044d3d735..0feb17e00df908ca0fc388249264ee4a220b6bf3 100644
--- a/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/annotation-document.jsp
@@ -1,40 +1,31 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
+    <omniDependencies:omniDependencies/>
 
     <!-- css - annotationStyle -->
     <link rel="stylesheet" type="text/css" href="../assets/css/annotationStyle.css">
     <!-- css - contextMenu -->
     <link href="https://swisnl.github.io/jQuery-contextMenu/dist/jquery.contextMenu.css" rel="stylesheet" type="text/css" />
-    <!-- css - bootstrap -->
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <!-- css - styles -->
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <!-- css - font awesome -->
-    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
-    <!-- css - sidebar -->
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
 
-    <!-- js - jQuery -->
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <!-- js - bootstrap -->
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
+    <!-- js - jQuery validation plugin -->
+    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.14.0/jquery.validate.min.js"></script>
     <!-- js - jQuery ui position -->
     <script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js" type="text/javascript"></script>
     <!-- js - contextMenu script -->
     <script src="https://swisnl.github.io/jQuery-contextMenu/dist/jquery.contextMenu.js" type="text/javascript"></script>
-    <!-- js - utility script -->
-    <script src="../assets/js/utility.js"></script>
+    <!-- js - annotation websocket script -->
+    <script src="../assets/js/annotationWebsocket.js"></script>
+    <!-- js - annotation REST script -->
+    <script src="../assets/js/annotationRest.js"></script>
     <!-- js - annotationScript -->
     <script src="../assets/js/annotationScript.js"></script>
-
 </head>
 
 <body>
@@ -43,16 +34,8 @@
         <div class="page-content-wrapper full-height">
             <div class="container-fluid full-height">
                 <div class="container-fluid-content">
-                    <div class="content-header">
-                        <h1>gemeinsam Forschen
-                            <a href="#">
-                    <span class="glyphicon glyphicon-envelope"
-                          style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-                            </a>
-                            <a href="#">
-                                <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-                            </a>
-                        </h1>
+                    <div class="flex">
+                        <headLine:headLine/>
                     </div>
                     <div class="content-mainpage">
                         <div class="leftcolumn">
@@ -78,7 +61,71 @@
                 </div>
             </div>
         </div>
+        <!-- annotation create modal -->
+        <div id="annotation-create-modal" class="modal fade" role="dialog">
+            <div class="modal-dialog modal-dialog-centered modal-sm">
+                <div class="modal-content">
+
+                    <!-- modal header -->
+                    <div class="modal-header flex">
+                        <h4 class="modal-title flex-one">Annotation</h4>
+                        <button type="button" class="close" data-dismiss="modal">&times;</button>
+                    </div>
+
+                    <!-- modal body -->
+                    <div class="modal-body">
+                        <form id="annotation-create-form">
+                            <div class="form-group">
+                                <label for="annotation-form-title" class="col-form-label">Titel:</label>
+                                <input type="text" class="form-control" id="annotation-form-title" name="title">
+                            </div>
+                            <div class="form-group">
+                                <label for="annotation-form-comment" class="col-form-label">Kommentar:</label>
+                                <textarea class="form-control resize-vertical" id="annotation-form-comment" name="comment"></textarea>
+                            </div>
+                        </form>
+                        <!-- modal footer -->
+                        <div class="modal-footer">
+                            <button id="btnSave" type="button" class="btn btn-success">Speichern</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+        <!-- annotation edit modal -->
+        <div id="annotation-edit-modal" class="modal fade" role="dialog">
+            <div class="modal-dialog modal-dialog-centered modal-sm">
+                <div class="modal-content">
+
+                    <!-- modal header -->
+                    <div class="modal-header flex">
+                        <h4 class="modal-title flex-one">Annotation bearbeiten</h4>
+                        <button type="button" class="close" data-dismiss="modal">&times;</button>
+                    </div>
+
+                    <!-- modal body -->
+                    <div class="modal-body">
+                        <form id="annotation-edit-form">
+                            <div class="form-group">
+                                <label for="annotation-form-title" class="col-form-label">Titel:</label>
+                                <input type="text" class="form-control" id="annotation-edit-form-title" name="title">
+                            </div>
+                            <div class="form-group">
+                                <label for="annotation-form-comment" class="col-form-label">Kommentar:</label>
+                                <textarea class="form-control resize-vertical" id="annotation-edit-form-comment" name="comment"></textarea>
+                            </div>
+                        </form>
+                        <!-- modal footer -->
+                        <div class="modal-footer">
+                            <button id="btnDelete" type="button" class="btn btn-danger">Löschen</button>
+                            <button id="btnEdit" type="button" class="btn btn-success">Bearbeiten</button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
     </div>
 </body>
 
-</html>
\ No newline at end of file
+</html>
diff --git a/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp b/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp
index e8cc29e1bd261c4649369c70ac15a3f6ed4c03d3..67b2861e38ad3e55fc6f0dd2db9acbab315608c6 100644
--- a/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp
@@ -1,18 +1,18 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html lang="en">
 <head>
-    <meta charset="utf-8">
-    <title>assessment calculator</title>
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/assessmentCalculator.js"></script>
-    <script src="../assets/js/utility.js"></script>
 </head>
 <body>
+<menu:menu/>
 <button id="calculateNow">Post Performance</button>
 <button id="giveItBack">Get TotalPerformance</button>
-<menu:menu></menu:menu>
+<headLine:headLine/>
 </body>
 </html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp b/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp
index ac3da978546d0d608c6fcd1d99595ce45592035f..047334f69717c358580fb58b3fc6eeff0d370094 100644
--- a/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/createJournal.jsp
@@ -1,105 +1,96 @@
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-	<meta charset="utf-8">
-	<meta name="viewport" content="width=device-width, initial-scale=1.0">
-	<title>Tagebucheintrag erstellen</title>
-	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-	<link rel="stylesheet" href="../assets/css/styles.css">
-	<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css">
-	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-	<script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script>
-	<script src="../assets/js/utility.js"></script>
-	<link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-	<link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-	<link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-	<link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-	<link rel="stylesheet" type="text/css" href="../assets/css/create-journal.css">
 
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css">
+    <script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script>
+    <link rel="stylesheet" type="text/css" href="../assets/css/create-journal.css">
+    <omniDependencies:omniDependencies/>
 </head>
 
 <body>
 <div id="wrapper">
-	<menu:menu></menu:menu>
+    <menu:menu></menu:menu>
 
-	<div class="page-content-wrapper">
-		<div class="container-fluid">
-			<h1 id="projectId">project1
-				<a href="#">
+    <div class="page-content-wrapper">
+        <div class="container-fluid">
+            <h1 id="projectId">project1
+                <a href="#">
                 <span class="glyphicon glyphicon-envelope"
-					  style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-				</a>
-				<a href="#">
-					<span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-				</a></h1>
-		</div>
-		<div>
-			<table>
-				<tr>
-					<td  id="yourContent">
-						<h1> Tagebucheintrag erstellen </h1>
-
-						<form id="journalform" class="form-journal" method="POST" action="../rest/journal/save" >
-
-							<input type="hidden" name="student" value="0">
-							<input type="hidden" name="project" value="0">
-
-							<div class="journal-form-container">
-
-								<div class = "journal-form-visibility">
-									Sichtbarkeit:
-									<select id="visibility" name="visibility" form="journalform">
-										<option value="ALL"> Alle </option>
-										<option value="GROUP"> Gruppe </option>
-										<option value="DOZENT"> Dozent </option>
-										<option value="NONE"> Nur Ich </option>
-									</select>
-								</div>
-
-								<div class = "journal-form-category">
-									Kategorie:
-									<select name="category" form="journalform">
-										<option value="TITEL"> Titel </option>
-										<option value="RECHERCHE"> Recherche </option>
-										<option value="LITERATURVERZEICHNIS"> Literaturverzeichnis </option>
-										<option value="FORSCHUNGSFRAGE"> Forschungsfrage </option>
-										<option value="UNTERSUCHUNGSKONZEPT"> Untersuchungskonzept </option>
-										<option value="METHODIK"> Methodik </option>
-										<option value="DURCHFUEHRUNG"> Durchführung </option>
-										<option value="AUSWERTUNG"> Auswertung </option>
-
-									</select>
-								</div>
-
-
-								<div class ="journal-form-editor">
-                                    <textarea id = "editor" name="text" form="journalform" >
-                                    </textarea>
-								</div>
-
-								<div class="journal-form-buttons">
-									<input class="btn btn-default btn-sm" type="submit">
-									<a id="backLink" class="btn btn-default btn-sm"> Zur&uuml;ck </a>
-								</div>
-
-							</div>
-						</form>
-
-					</td>
-				</tr>
-			</table>
-		</div>
-	</div>
+                      style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
+                </a>
+                <a href="#">
+                    <span class="glyphicon glyphicon-cog"
+                          style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
+                </a></h1>
+        </div>
+        <div>
+            <table>
+                <tr>
+                    <td id="yourContent">
+                        <h1> Tagebucheintrag erstellen </h1>
+
+                        <form id="journalform" class="form-journal" method="POST" action="../rest/journal/save">
+
+                            <input type="hidden" id="student" name="student">
+                            <input type="hidden" id="project" name="project">
+                            <input type="hidden" id="journalid" name="id">
+
+                            <div class="journal-form-container">
+
+                                <div class="journal-form-visibility">
+                                    Sichtbarkeit:
+                                    <select id="visibility" name="visibility" form="journalform">
+                                        <option value="ALL"> Alle</option>
+                                        <option value="GROUP"> Gruppe</option>
+                                        <option value="DOZENT"> Dozent</option>
+                                        <option value="NONE"> Nur Ich</option>
+                                    </select>
+                                </div>
+
+                                <div class="journal-form-category">
+                                    Kategorie:
+                                    <select name="category" form="journalform">
+                                        <option value="TITEL"> Titel</option>
+                                        <option value="RECHERCHE"> Recherche</option>
+                                        <option value="LITERATURVERZEICHNIS"> Literaturverzeichnis</option>
+                                        <option value="FORSCHUNGSFRAGE"> Forschungsfrage</option>
+                                        <option value="UNTERSUCHUNGSKONZEPT"> Untersuchungskonzept</option>
+                                        <option value="METHODIK"> Methodik</option>
+                                        <option value="DURCHFUEHRUNG"> Durchführung</option>
+                                        <option value="AUSWERTUNG"> Auswertung</option>
+
+                                    </select>
+                                </div>
+
+
+                                <div class="journal-form-editor">
+                                    <textarea id="editor" name="text" form="journalform"></textarea>
+                                </div>
+
+                                <div class="journal-form-buttons">
+                                    <input class="btn btn-default btn-sm" type="submit">
+                                    <a id="backLink" class="btn btn-default btn-sm"> Zur&uuml;ck </a>
+                                </div>
+
+                            </div>
+                        </form>
+
+                    </td>
+                </tr>
+            </table>
+        </div>
+    </div>
 </div>
 
 <script src="../assets/js/jquery.min.js"></script>
 <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
 <script src="../assets/js/Sidebar-Menu.js"></script>
-<script  src="../assets/js/createJournal.js"></script>
+<script src="../assets/js/createJournal.js"></script>
 </body>
 
 </html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/createProject.jsp b/gemeinsamforschen/src/main/webapp/pages/createProject.jsp
index b13361095939684046b7ab9328d3f42eb6f3bbf2..3984538cbfcaa344fa73305dcfd271d368ce6209 100644
--- a/gemeinsamforschen/src/main/webapp/pages/createProject.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/createProject.jsp
@@ -1,37 +1,22 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/createProject.js"></script>
 
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-
-            <h1>Einschreiben in einen Kurs</h1>
-            <a href="#"><span class="glyphicon glyphicon-envelope"
-                              style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a>
-            <a href="#"><span class="glyphicon glyphicon-cog"
-                              style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a>
-        </div>
+        <headLine:headLine/>
         <div style="margin-left: 2%;">
             <br><br>
             <label>Projektname: <input placeholder="Projektname"></label>
diff --git a/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp b/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp
index ad122bc926c195526ea109c12152f1a24209e498..512844f6c308bac4903aaa02e3f92af58f0405a1 100644
--- a/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp
@@ -1,45 +1,30 @@
 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <html>
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/createQuiz.js"></script>
-
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1>Projekt1</h1>
-            <a href="#"><span class="glyphicon glyphicon-envelope"
-                              style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a>
-            <a href="#"><span class="glyphicon glyphicon-cog"
-                              style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a>
-        </div>
+        <headLine:headLine/>
         <div style="margin-left:50px;">
             <div>
-            <input placeholder="Ihre Frage">
+            <label>Frage: <input placeholder="Ihre Frage" id="question"></label><!--todo: remember to cut out whitespace and signs (?.,;)-->
             </div>
-            <div><label><input type="radio" name="type">Schwierigkeit 3</label></div>
-            <div><label><input type="radio" name="type">Schwierigkeit 2</label></div>
-            <div><label><input type="radio" name="type">Schwierigkeit 1</label></div>
-            <div><input placeholder="korrekte Antwort"><button> + </button><button> - </button></div>
-            <div><input placeholder="inkorrekte Antwort"><button> + </button><button> - </button></div>
+            <div><label><input type="radio" name="type" checked="checked">multiple choice</label></div>
+            <div><label><input type="radio" name="type" disabled>Freitext</label></div>
+            <div><label><input type="radio" name="type" disabled>rhetorische Frage</label></div>
+            <div id="correctAnswers"><input placeholder="korrekte Antwort" id="correctAnswer"></div>
+            <button id="addCorrectAnswer"> + </button><button id="deleteCorrectAnswer"> - </button>
+            <div id="incorrectAnswers"><input placeholder="inkorrekte Antwort" id="incorrectAnswer"></div>
+            <button id="addIncorrectAnswer"> + </button><button id="deleteIncorrectAnswer"> - </button>
             <button id="save">speichern</button>
         </div>
     </div>
diff --git a/gemeinsamforschen/src/main/webapp/pages/editDescription.jsp b/gemeinsamforschen/src/main/webapp/pages/editDescription.jsp
index 1113922a4f20be7a8a92d2d5689be1ded6c64c08..5a5bd034793617af707358b3a968d004002cfec1 100644
--- a/gemeinsamforschen/src/main/webapp/pages/editDescription.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/editDescription.jsp
@@ -1,24 +1,15 @@
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>Tagebucheintrag erstellen</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
+
     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
     <script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script>
-    <script src="../assets/js/utility.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
     <link rel="stylesheet" type="text/css" href="../assets/css/editDescription.css">
+    <omniDependencies:omniDependencies/>
 
 </head>
 
@@ -45,14 +36,13 @@
 
                         <form id="descriptionform" class="form-journal" method="POST" action="../rest/projectdescription/saveText">
 
-                            <input type="hidden" name="student" value="0">
-                            <input type="hidden" name="project" value="0">
+                            <input type="hidden" id="student" name="student">
+                            <input type="hidden" id="project" name="project">
 
                             <div class="description-form-container">
 
                                 <div class ="description-form-editor">
-                                    <textarea id = "editor" name="text" form="descriptionform" >
-                                    </textarea>
+                                    <textarea id = "editor" name="text" form="descriptionform"></textarea>
                                 </div>
 
                                 <div class="description-form-buttons">
diff --git a/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp b/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp
index 9b8c7327608fa000855677daa9af7c1e62a1619e..ee473b420b8267986da32c0ed60a0d5543578e02 100644
--- a/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/eportfolio.jsp
@@ -1,28 +1,19 @@
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>E-Portfolio</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
+
     <link rel="stylesheet" href="../assets/css/e-portfolio.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
 
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
 
     <div class="page-content-wrapper">
         <div class="container-fluid">
@@ -52,7 +43,7 @@
                               <div class="journal-description-container">
                                     <div class="journal-description-title">
                                     </div>
-                                    <div class="journal-description-edit" align="right">
+                                    <div class="journal-description-edit" id="description-edit" align="right">
                                         <a id="editDescriptionLink" class="btn btn-default btn-sm">
                                             <i class="fa fa-pencil"></i> Bearbeiten</a>
                                         <a class="btn btn-default btn-sm" data-toggle="modal" data-target="#closeDescriptionModal"><i class="fa fa-check-square" aria-hidden="true"></i>Abschlie&szlig;en</a>
@@ -101,11 +92,12 @@
             </div>
             <div class="modal-body">
                 <form id="linkform" method="POST" action="../rest/projectdescription/addLink" >
+                    <input type="hidden" name="projectdescriptionId" id="projectdescriptionId" value=""/>
                     Name:<br>
                     <input type="text" name="name" form="linkform">
                     <br>
                     URL:<br>
-                    <input type="text" name="link" form="linkform">
+                    <input type="url" name="link" form="linkform">
                     <br><br>
                     <input class="btn btn-default" type="submit"  >
                     <button type="button" class="btn btn-default" data-dismiss="modal">Abbrechen</button>
@@ -124,11 +116,14 @@
                 <h4 class="modal-title">Tagebucheintrag schließen</h4>
             </div>
             <div class="modal-body">
+                <input type="hidden" name="journalID" id="journalID-input" value=""/>
                 Tagebucheintrag schließen? Dieser Eintrag kann nach Bestätigung nicht mehr bearbeitet werden.
             </div>
             <div class="modal-footer">
                 <div class="btn-group">
-                    <button type="button" class="btn btn-primary mr-auto">Ja</button>
+                    <button type="button" class="btn btn-primary mr-auto" data-dismiss="modal" onclick="closeJournal()">
+                        Ja
+                    </button>
                     <button type="button" class="btn btn-secondary" data-dismiss="modal">Nein</button>
 
                 </div>
@@ -149,7 +144,7 @@
             </div>
             <div class="modal-footer">
                 <div class="btn-group">
-                    <button type="button" class="btn btn-primary mr-auto" data-dismiss="modal">Ja</button>
+                    <button type="button" class="btn btn-primary mr-auto" data-dismiss="modal" onclick="closeDescription()">Ja</button>
                     <button type="button" class="btn btn-secondary" data-dismiss="modal">Nein</button>
 
                 </div>
diff --git a/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp b/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp
index 09ec382b8294edad32f29670b1ea81ec835e3ef8..1273a5887b11dd21268eb8c61084693d21ef565c 100644
--- a/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp
@@ -1,45 +1,45 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
-
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/finalAssessment.js"></script>
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
+
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">project1
-                <a href="#">
-                <span class="glyphicon glyphicon-envelope"
-                      style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-                </a>
-                <a href="#">
-                    <span class="glyphicon glyphicon-cog"
-                          style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-                </a></h1>
-        </div>
+        <headLine:headLine/>
         <div>
             <table>
                 <tr>
                     <td id="yourContent">
                         <h1>Assessment for project1 </h1>
+
+                        <!-- Vorschläge für Bewertungen:
+                            ++Verantwortungsbewusstsein
+                            ++Disskusionsfähigkeit
+                            ++Anteil am Produkt
+                            ++Kooperationsbereitschaft
+                            ++Selbstständigkeit
+                            -+Führungsqualität
+                            -+Pünktlichkeit
+                            -+Motivation
+                            -+Gewissenhaftigkeit
+                            -+respektvoller Umgang mit anderen
+                            -+Wert der Beiträge
+                            --kann sich an Vereinbarungen halten
+                            --emotionale Stabilität
+                            --Hilfsbereitschaft
+                        -->
+
                         <!-- here will be all the content -->
                         <div class="container">
                             <div id="myCarousel" class="carousel slide" data-ride="carousel" data-interval="false">
@@ -51,10 +51,14 @@
                                 </ol>
 
                                 <!-- Wrapper for slides -->
+                                <div class="alert alert-info" id="notAllRated">
+                                    Es wurden noch nicht alle Studenten vollständig bewertet
+                                </div>
+
                                 <div class="carousel-inner">
                                     <div class="item active">
                                         <table class="table-striped peerStudent"
-                                               style="width:70%;border:1px solid; margin:auto;" id="student1">
+                                               style="width:70%;border:1px solid; margin:auto;" id="Student1">
                                             <tr>
                                                 <td align="center">
                                                     <img src="../assets/img/1.jpg" alt="student1"
@@ -63,20 +67,36 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <h3>Führungsqualität</h3>
+                                                    <h3>Verantwortungsbewusstsein</h3>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label>gut<input type="radio" value="5"
-                                                                     name="leadership1"></label>
-                                                    <input type="radio" value="4" name="leadership1">
-                                                    <input type="radio" value="3" name="leadership1">
-                                                    <input type="radio" value="2" name="leadership1">
-                                                    <label><input type="radio" value="1" name="leadership1">
+                                                    <label>stark ausgeprägt<input type="radio" value="5"
+                                                                     name="responsibilityStudent1"></label>
+                                                    <input type="radio" value="4" name="responsibilityStudent1">
+                                                    <input type="radio" value="3" name="responsibilityStudent1">
+                                                    <input type="radio" value="2" name="responsibilityStudent1">
+                                                    <label><input type="radio" value="1" name="responsibilityStudent1">
                                                         ungenügend</label>
                                                 </td>
                                             </tr>
+                                            <tr>
+                                                <td align="center">
+                                                    <h3>Anteil am Produkt</h3>
+                                                </td>
+                                            </tr>
+                                            <tr>
+                                                <td align="center">
+                                                    <label>großer Anteil<input type="radio" value="5"
+                                                                     name="partOfWorkStudent1"></label>
+                                                    <input type="radio" value="4" name="partOfWorkStudent1">
+                                                    <input type="radio" value="3" name="partOfWorkStudent1">
+                                                    <input type="radio" value="2" name="partOfWorkStudent1">
+                                                    <label><input type="radio" value="1" name="partOfWorkStudent1">
+                                                        geringer Anteil</label>
+                                                </td>
+                                            </tr>
                                             <tr>
                                                 <td align="center">
                                                     <h3>Kooperationsbereitschaft</h3>
@@ -84,29 +104,29 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="cooparation1">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="cooparation1">
-                                                    <input type="radio" value="3" name="cooparation1">
-                                                    <input type="radio" value="2" name="cooparation1">
-                                                    <label><input type="radio" value="1" name="cooparation1">
-                                                        ungenügend</label>
+                                                    <label>sehr kooperativ<input type="radio" value="5" name="cooperationStudent1">
+                                                    </label>
+                                                    <input type="radio" value="4" name="cooperationStudent1">
+                                                    <input type="radio" value="3" name="cooperationStudent1">
+                                                    <input type="radio" value="2" name="cooperationStudent1">
+                                                    <label><input type="radio" value="1" name="cooperationStudent1">
+                                                        nicht kooperativ</label>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <h3>Pünktlichkeit</h3>
+                                                    <h3>Disskusionsfähigkeit</h3>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="punctual1">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="punctual1">
-                                                    <input type="radio" value="3" name="punctual1">
-                                                    <input type="radio" value="2" name="punctual1">
-                                                    <label><input type="radio" value="1" name="punctual1">
-                                                        ungenügend</label>
+                                                    <label>gut kommuniziert und Meinung vertreten<input type="radio" value="5" name="communicationStudent1">
+                                                    </label>
+                                                    <input type="radio" value="4" name="communicationStudent1">
+                                                    <input type="radio" value="3" name="communicationStudent1">
+                                                    <input type="radio" value="2" name="communicationStudent1">
+                                                    <label><input type="radio" value="1" name="communicationStudent1">
+                                                        keine Meinung und schlecht kommuniziert</label>
                                                 </td>
                                             </tr>
                                             <tr>
@@ -116,13 +136,13 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="autonomous1">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="autonomous1">
-                                                    <input type="radio" value="3" name="autonomous1">
-                                                    <input type="radio" value="2" name="autonomous1">
-                                                    <label><input type="radio" value="1" name="autonomous1">
-                                                        ungenügend</label>
+                                                    <label>selbstständig<input type="radio" value="5" name="autonomousStudent1">
+                                                    </label>
+                                                    <input type="radio" value="4" name="autonomousStudent1">
+                                                    <input type="radio" value="3" name="autonomousStudent1">
+                                                    <input type="radio" value="2" name="autonomousStudent1">
+                                                    <label><input type="radio" value="1" name="autonomousStudent1">
+                                                        abhängig</label>
                                                 </td>
                                             </tr>
                                         </table>
@@ -130,29 +150,45 @@
 
                                     <div class="item">
                                         <table class="table-striped peerStudent"
-                                               style="width:70%;border:1px solid; margin:auto;" id="student2">
+                                               style="width:70%;border:1px solid; margin:auto;" id="Student2">
                                             <tr>
                                                 <td align="center">
-                                                    <img src="../assets/img/2.jpg" alt="student2"
+                                                    <img src="../assets/img/2.jpg" alt="Student2"
                                                          style="width:20%;">
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <h3>Führungsqualität</h3>
+                                                    <h3>Verantwortungsbewusstsein</h3>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label>gut<input type="radio" value="5"
-                                                                     name="leadership2"></label>
-                                                    <input type="radio" value="4" name="leadership2">
-                                                    <input type="radio" value="3" name="leadership2">
-                                                    <input type="radio" value="2" name="leadership2">
-                                                    <label><input type="radio" value="1" name="leadership2">
+                                                    <label>stark ausgeprägt<input type="radio" value="5"
+                                                                                  name="responsibilityStudent2"></label>
+                                                    <input type="radio" value="4" name="responsibilityStudent2">
+                                                    <input type="radio" value="3" name="responsibilityStudent2">
+                                                    <input type="radio" value="2" name="responsibilityStudent2">
+                                                    <label><input type="radio" value="1" name="responsibilityStudent2">
                                                         ungenügend</label>
                                                 </td>
                                             </tr>
+                                            <tr>
+                                                <td align="center">
+                                                    <h3>Anteil am Produkt</h3>
+                                                </td>
+                                            </tr>
+                                            <tr>
+                                                <td align="center">
+                                                    <label>großer Anteil<input type="radio" value="5"
+                                                                               name="partOfWorkStudent2"></label>
+                                                    <input type="radio" value="4" name="partOfWorkStudent2">
+                                                    <input type="radio" value="3" name="partOfWorkStudent2">
+                                                    <input type="radio" value="2" name="partOfWorkStudent2">
+                                                    <label><input type="radio" value="1" name="partOfWorkStudent2">
+                                                        geringer Anteil</label>
+                                                </td>
+                                            </tr>
                                             <tr>
                                                 <td align="center">
                                                     <h3>Kooperationsbereitschaft</h3>
@@ -160,29 +196,29 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="cooparation2">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="cooparation2">
-                                                    <input type="radio" value="3" name="cooparation2">
-                                                    <input type="radio" value="2" name="cooparation2">
-                                                    <label><input type="radio" value="1" name="cooparation2">
-                                                        ungenügend</label>
+                                                    <label>sehr kooperativ<input type="radio" value="5" name="cooperationStudent2">
+                                                    </label>
+                                                    <input type="radio" value="4" name="cooperationStudent2">
+                                                    <input type="radio" value="3" name="cooperationStudent2">
+                                                    <input type="radio" value="2" name="cooperationStudent2">
+                                                    <label><input type="radio" value="1" name="cooperationStudent2">
+                                                        nicht kooperativ</label>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <h3>Pünktlichkeit</h3>
+                                                    <h3>Disskusionsfähigkeit</h3>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="punctual2">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="punctual2">
-                                                    <input type="radio" value="3" name="punctual2">
-                                                    <input type="radio" value="2" name="punctual2">
-                                                    <label><input type="radio" value="1" name="punctual2">
-                                                        ungenügend</label>
+                                                    <label>gut kommuniziert und Meinung vertreten<input type="radio" value="5" name="communicationStudent2">
+                                                    </label>
+                                                    <input type="radio" value="4" name="communicationStudent2">
+                                                    <input type="radio" value="3" name="communicationStudent2">
+                                                    <input type="radio" value="2" name="communicationStudent2">
+                                                    <label><input type="radio" value="1" name="communicationStudent2">
+                                                        keine Meinung und schlecht kommuniziert</label>
                                                 </td>
                                             </tr>
                                             <tr>
@@ -192,13 +228,13 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="autonomous2">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="autonomous2">
-                                                    <input type="radio" value="3" name="autonomous2">
-                                                    <input type="radio" value="2" name="autonomous2">
-                                                    <label><input type="radio" value="1" name="autonomous2">
-                                                        ungenügend</label>
+                                                    <label>selbstständig<input type="radio" value="5" name="autonomousStudent2">
+                                                    </label>
+                                                    <input type="radio" value="4" name="autonomousStudent2">
+                                                    <input type="radio" value="3" name="autonomousStudent2">
+                                                    <input type="radio" value="2" name="autonomousStudent2">
+                                                    <label><input type="radio" value="1" name="autonomousStudent2">
+                                                        abhängig</label>
                                                 </td>
                                             </tr>
                                         </table>
@@ -206,29 +242,45 @@
 
                                     <div class="item">
                                         <table class="table-striped peerStudent"
-                                               style="width:70%;border:1px solid; margin:auto;" id="student3">
+                                               style="width:70%;border:1px solid; margin:auto;" id="Student3">
                                             <tr>
                                                 <td align="center">
-                                                    <img src="../assets/img/3.jpg" alt="student3"
+                                                    <img src="../assets/img/3.jpg" alt="Student3"
                                                          style="width:20%;">
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <h3>Führungsqualität</h3>
+                                                    <h3>Verantwortungsbewusstsein</h3>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label>gut<input type="radio" value="5"
-                                                                     name="leadership3"></label>
-                                                    <input type="radio" value="4" name="leadership3">
-                                                    <input type="radio" value="3" name="leadership3">
-                                                    <input type="radio" value="2" name="leadership3">
-                                                    <label><input type="radio" value="1" name="leadership3">
+                                                    <label>stark ausgeprägt<input type="radio" value="5"
+                                                                                  name="responsibilityStudent3"></label>
+                                                    <input type="radio" value="4" name="responsibilityStudent3">
+                                                    <input type="radio" value="3" name="responsibilityStudent3">
+                                                    <input type="radio" value="2" name="responsibilityStudent3">
+                                                    <label><input type="radio" value="1" name="responsibilityStudent3">
                                                         ungenügend</label>
                                                 </td>
                                             </tr>
+                                            <tr>
+                                                <td align="center">
+                                                    <h3>Anteil am Produkt</h3>
+                                                </td>
+                                            </tr>
+                                            <tr>
+                                                <td align="center">
+                                                    <label>großer Anteil<input type="radio" value="5"
+                                                                               name="partOfWorkStudent3"></label>
+                                                    <input type="radio" value="4" name="partOfWorkStudent3">
+                                                    <input type="radio" value="3" name="partOfWorkStudent3">
+                                                    <input type="radio" value="2" name="partOfWorkStudent3">
+                                                    <label><input type="radio" value="1" name="partOfWorkStudent3">
+                                                        geringer Anteil</label>
+                                                </td>
+                                            </tr>
                                             <tr>
                                                 <td align="center">
                                                     <h3>Kooperationsbereitschaft</h3>
@@ -236,29 +288,29 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="cooparation3">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="cooparation3">
-                                                    <input type="radio" value="3" name="cooparation3">
-                                                    <input type="radio" value="2" name="cooparation3">
-                                                    <label><input type="radio" value="1" name="cooparation3">
-                                                        ungenügend</label>
+                                                    <label>sehr kooperativ<input type="radio" value="5" name="cooperationStudent3">
+                                                    </label>
+                                                    <input type="radio" value="4" name="cooperationStudent3">
+                                                    <input type="radio" value="3" name="cooperationStudent3">
+                                                    <input type="radio" value="2" name="cooperationStudent3">
+                                                    <label><input type="radio" value="1" name="cooperationStudent3">
+                                                        nicht kooperativ</label>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <h3>Pünktlichkeit</h3>
+                                                    <h3>Disskusionsfähigkeit</h3>
                                                 </td>
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="punctual3">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="punctual3">
-                                                    <input type="radio" value="3" name="punctual3">
-                                                    <input type="radio" value="2" name="punctual3">
-                                                    <label><input type="radio" value="1" name="punctual3">
-                                                        ungenügend</label>
+                                                    <label>gut kommuniziert und Meinung vertreten<input type="radio" value="5" name="communicationStudent3">
+                                                    </label>
+                                                    <input type="radio" value="4" name="communicationStudent3">
+                                                    <input type="radio" value="3" name="communicationStudent3">
+                                                    <input type="radio" value="2" name="communicationStudent3">
+                                                    <label><input type="radio" value="1" name="communicationStudent3">
+                                                        keine Meinung und schlecht kommuniziert</label>
                                                 </td>
                                             </tr>
                                             <tr>
@@ -268,13 +320,13 @@
                                             </tr>
                                             <tr>
                                                 <td align="center">
-                                                    <label><input type="radio" value="5" name="autonomous3">
-                                                        gut</label>
-                                                    <input type="radio" value="4" name="autonomous3">
-                                                    <input type="radio" value="3" name="autonomous3">
-                                                    <input type="radio" value="2" name="autonomous3">
-                                                    <label><input type="radio" value="1" name="autonomous3">
-                                                        ungenügend</label>
+                                                    <label>selbstständig<input type="radio" value="5" name="autonomousStudent3">
+                                                    </label>
+                                                    <input type="radio" value="4" name="autonomousStudent3">
+                                                    <input type="radio" value="3" name="autonomousStudent3">
+                                                    <input type="radio" value="2" name="autonomousStudent3">
+                                                    <label><input type="radio" value="1" name="autonomousStudent3">
+                                                        abhängig</label>
                                                 </td>
                                             </tr>
                                         </table>
diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig
deleted file mode 100644
index 621176b5de895049ff300d1782269135a296493e..0000000000000000000000000000000000000000
--- a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-</head>
-
-<body>
-<h1>Übersicht für Dozent1</h1>
-<a href="#"><span class="glyphicon glyphicon-envelope"
-                  style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a>
-<a href="#"><span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a>
-<div>
-    <table id="projects">  <!-- getElementById('projects').append um neue Projekte anzufügen -->
-        <tr style="cursor:pointer" role="button">
-            <td>
-<<<<<<< HEAD
-                <a id="project1Link">
-=======
-                <a href="project-docent.jsp">
->>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd
-                    <h1>dummy Projekt1</h1>
-                </a>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <div style="width:100px;"></div>
-                <div style="width:741px;">
-                    <div class="panel panel-default">
-                        <div class="panel-heading">
-                            <h3 class="panel-title">Newsfeed </h3>
-                        </div>
-                        <div class="panel-body">
-                            <ul class="list-group">
-                                <li class="list-group-item">
-                                    <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span>
-                                </li>
-                                <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li>
-                                <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li>
-                            </ul>
-                        </div>
-                    </div>
-                </div>
-            </td>
-        </tr>
-        <tr>
-            <td></td>
-        </tr>
-        <tr style="cursor:pointer" role="button">
-            <td>
-                <a href="project-docent.jsp">
-                    <h1>dummy Projekt2</h1>
-                </a>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <div style="width:100px;"></div>
-                <div style="width:741px;">
-                    <div class="panel panel-default">
-                        <div class="panel-heading">
-                            <h3 class="panel-title">Newsfeed </h3>
-                        </div>
-                        <div class="panel-body">
-                            <ul class="list-group">
-                                <li class="list-group-item">
-                                    <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span>
-                                </li>
-                                <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li>
-                                <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li>
-                            </ul>
-                        </div>
-                    </div>
-                </div>
-            </td>
-        </tr>
-    </table>
-</div>
-<button class="btn btn-default" type="button" style="margin-left:250px;">Projekt erstellen</button>
-<script src="../assets/js/jquery.min.js"></script>
-<script src="../assets/bootstrap/js/bootstrap.min.js"></script>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp
index a25d71d8d35bdaa5a3760e11eb5d7e23b3a044f0..736db5bd3aa5a1ca53a86b1694994e78ef880631 100644
--- a/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/overview-docent.jsp
@@ -1,42 +1,27 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"  %>
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/overview-docent.js"></script>
-
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
 
-        <h1>Übersicht für Dozent1</h1>
-        <a href="#"><span class="glyphicon glyphicon-envelope"
-                          style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a>
-        <a href="#"><span class="glyphicon glyphicon-cog"
-                          style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a>
-        <div>
+        <headLine:headLine/>
             <table id="projects">  <!-- getElementById('projects').append um neue Projekte anzufügen -->
                 <tr class="pageChanger">
                     <td>
                         <a id="project1Link">
-                            <h1>dummy Projekt1</h1>
+                            <h1>gemeinsamForschen</h1>
                         </a>
                     </td>
                 </tr>
@@ -69,7 +54,7 @@
                 <tr class="pageChanger">
                     <td>
                         <a id="project2Link">
-                            <h1>dummy Projekt2</h1>
+                            <h1>Kaleo</h1>
                         </a>
                     </td>
                 </tr>
@@ -100,8 +85,6 @@
         </div>
         <button class="btn btn-default" type="button" id="createProject" style="margin-left:250px;">Projekt erstellen</button>
     </div>
-</div>
-
 </body>
 
 </html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig b/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig
deleted file mode 100644
index db7445c800029d1c311a2a61f6528428a110ae85..0000000000000000000000000000000000000000
--- a/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig
+++ /dev/null
@@ -1,94 +0,0 @@
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <script src="../assets/js/utility.js"></script>
-    <script src="../assets/js/overview-student.js"></script>
-
-</head>
-
-<body>
-<h1>Übersicht für Student1</h1>
-<a href="#"><span class="glyphicon glyphicon-envelope"
-                  style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a>
-<a href="#"><span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a>
-<div>
-    <table id="projects">  <!-- getElementById('projects').append um neue Projekte anzufügen -->
-        <tr style="cursor:pointer" role="button">
-            <td>
-<<<<<<< HEAD
-                <a id="project1Link">
-=======
-                <a href="project-docent.jsp">
->>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd
-                    <h1>dummy Projekt1</h1>
-                </a>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <div style="width:100px;"></div>
-                <div style="width:741px;">
-                    <div class="panel panel-default">
-                        <div class="panel-heading">
-                            <h3 class="panel-title">Newsfeed </h3>
-                        </div>
-                        <div class="panel-body">
-                            <ul class="list-group">
-                                <li class="list-group-item">
-                                    <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span>
-                                </li>
-                                <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li>
-                                <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li>
-                            </ul>
-                        </div>
-                    </div>
-                </div>
-            </td>
-        </tr>
-        <tr>
-            <td></td>
-        </tr>
-        <tr style="cursor:pointer" role="button">
-            <td>
-                <a href="project-docent.jsp">
-                    <h1>dummy Projekt2</h1>
-                </a>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <div style="width:100px;"></div>
-                <div style="width:741px;">
-                    <div class="panel panel-default">
-                        <div class="panel-heading">
-                            <h3 class="panel-title">Newsfeed </h3>
-                        </div>
-                        <div class="panel-body">
-                            <ul class="list-group">
-                                <li class="list-group-item">
-                                    <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span>
-                                </li>
-                                <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li>
-                                <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li>
-                            </ul>
-                        </div>
-                    </div>
-                </div>
-            </td>
-        </tr>
-    </table>
-</div>
-    </div><button class="btn btn-default" type="button" style="margin-left:250px;">Projekt beitreten</button>
-    <script src="../assets/js/jquery.min.js"></script>
-    <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
-</body>
-
-</html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-student.jsp b/gemeinsamforschen/src/main/webapp/pages/overview-student.jsp
index ab21d52a2995b2e150d0883d456dd72fce018d53..8feef4d6d1bda9b41939b4bd5c2b386d070bbfec 100644
--- a/gemeinsamforschen/src/main/webapp/pages/overview-student.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/overview-student.jsp
@@ -1,42 +1,28 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/overview-student.js"></script>
 
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1>Übersicht für Student1</h1>
-            <a href="#"><span class="glyphicon glyphicon-envelope"
-                              style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a>
-            <a href="#"><span class="glyphicon glyphicon-cog"
-                              style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a>
-        </div>
+        <headLine:headLine/>
         <div>
             <table id="projects">  <!-- getElementById('projects').append um neue Projekte anzufügen -->
                 <tr class="pageChanger">
                     <td>
                         <a id="project1Link">
-                            <h1>dummy Projekt1</h1>
+                            <h1>gemeinsamForschen</h1>
                         </a>
                     </td>
                 </tr>
@@ -69,8 +55,8 @@
                 </tr>
                 <tr class="pageChanger">
                     <td>
-                        <a href="project-student.jsp">
-                            <h1>dummy Projekt2</h1>
+                        <a id="project2Link">
+                            <h1>Kaleo</h1>
                         </a>
                     </td>
                 </tr>
diff --git a/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp
index e7323fe38f582b0f9fccaba76f4a000b6175f2bf..9dbf5687f892d59a4d44927e6bce2832aed4d305 100644
--- a/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp
@@ -1,36 +1,26 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib prefix = "communication" uri = "/communication/chatWindow.tld"%>
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
+<%@ taglib prefix="communication" uri="/communication/chatWindow.tld" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>fltrail</title>
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
-
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-    <h1>dummy Projekt1 für Dozent1</h1><button class="btn btn-default" type="button">Gruppen erstellen</button><button class="btn btn-default" type="button">Projekt finalisieren</button><button class="btn btn-default" type="button">Exportiere Projektergebnisse</button>
-        </div>
-    <button
-        class="btn btn-default" type="button">Exportiere Zwischenstand</button><button class="btn btn-default" type="button">Quizfrage erstellen</button>
+        <headLine:headLine/>
+        <button
+                class="btn btn-default" type="button">Exportiere Zwischenstand
+        </button>
+        <button class="btn btn-default" type="button">Quizfrage erstellen</button>
         <div>
             <div class="container">
                 <div class="row">
@@ -38,60 +28,60 @@
                         <div class="table-responsive" style="width:294px;">
                             <table class="table">
                                 <thead>
-                                    <tr>
-                                        <th>Gruppe1 </th>
-                                        <th>Beiträge </th>
-                                    </tr>
+                                <tr>
+                                    <th>Gruppe1</th>
+                                    <th>Beiträge</th>
+                                </tr>
                                 </thead>
                                 <tbody>
-                                    <tr>
-                                        <td>student1 </td>
-                                        <td>Interfaces </td>
-                                    </tr>
-                                    <tr>
-                                        <td>student2 </td>
-                                        <td>Design </td>
-                                    </tr>
+                                <tr>
+                                    <td>student1</td>
+                                    <td>Interfaces</td>
+                                </tr>
+                                <tr>
+                                    <td>student2</td>
+                                    <td>Design</td>
+                                </tr>
                                 </tbody>
                             </table>
                         </div>
                         <div class="table-responsive" style="width:294px;">
                             <table class="table">
                                 <thead>
-                                    <tr>
-                                        <th>Gruppe2 </th>
-                                        <th>Beiträge </th>
-                                    </tr>
+                                <tr>
+                                    <th>Gruppe2</th>
+                                    <th>Beiträge</th>
+                                </tr>
                                 </thead>
                                 <tbody>
-                                    <tr>
-                                        <td>student3 </td>
-                                        <td>Interfaces </td>
-                                    </tr>
-                                    <tr>
-                                        <td>student4 </td>
-                                        <td>Design </td>
-                                    </tr>
+                                <tr>
+                                    <td>student3</td>
+                                    <td>Interfaces</td>
+                                </tr>
+                                <tr>
+                                    <td>student4</td>
+                                    <td>Design</td>
+                                </tr>
                                 </tbody>
                             </table>
                         </div>
                         <div class="table-responsive" style="width:294px;">
                             <table class="table">
                                 <thead>
-                                    <tr>
-                                        <th>Gruppe3 </th>
-                                        <th>Beiträge </th>
-                                    </tr>
+                                <tr>
+                                    <th>Gruppe3</th>
+                                    <th>Beiträge</th>
+                                </tr>
                                 </thead>
                                 <tbody>
-                                    <tr>
-                                        <td>student5 </td>
-                                        <td>Interfaces </td>
-                                    </tr>
-                                    <tr>
-                                        <td>student6 </td>
-                                        <td>Design </td>
-                                    </tr>
+                                <tr>
+                                    <td>student5</td>
+                                    <td>Interfaces</td>
+                                </tr>
+                                <tr>
+                                    <td>student6</td>
+                                    <td>Design</td>
+                                </tr>
                                 </tbody>
                             </table>
                         </div>
@@ -108,12 +98,18 @@
                                             <div class="media-left"><a></a></div>
                                             <div class="media-body">
                                                 <div class="media" style="overflow:visible;">
-                                                    <div class="media-left"><a><img src="../assets/img/1.jpg" class="img-rounded" style="width: 25px; height:25px;"></a></div>
+                                                    <div class="media-left"><a><img src="../assets/img/1.jpg"
+                                                                                    class="img-rounded"
+                                                                                    style="width: 25px; height:25px;"></a>
+                                                    </div>
                                                     <div class="media-body" style="overflow:visible;">
                                                         <div class="row">
                                                             <div class="col-md-12">
-                                                                <p><a href="#">Sara Doe:</a> This guy has been going 100+ MPH on side streets. <br>
-<small class="text-muted">August 6, 2016 @ 10:35am </small></p>
+                                                                <p><a href="#">Sara Doe:</a> This guy has been going
+                                                                    100+ MPH on side streets. <br>
+                                                                    <small class="text-muted">August 6, 2016 @ 10:35am
+                                                                    </small>
+                                                                </p>
                                                             </div>
                                                         </div>
                                                     </div>
@@ -126,12 +122,18 @@
                                             <div class="media-left"><a></a></div>
                                             <div class="media-body">
                                                 <div class="media" style="overflow:visible;">
-                                                    <div class="media-left"><a><img src="../assets/img/1.jpg" class="img-rounded" style="width: 25px; height:25px;"></a></div>
+                                                    <div class="media-left"><a><img src="../assets/img/1.jpg"
+                                                                                    class="img-rounded"
+                                                                                    style="width: 25px; height:25px;"></a>
+                                                    </div>
                                                     <div class="media-body" style="overflow:visible;">
                                                         <div class="row">
                                                             <div class="col-md-12">
-                                                                <p><a href="#">Brennan Prill:</a> This guy has been going 100+ MPH on side streets. <br>
-<small class="text-muted">August 6, 2016 @ 10:35am </small></p>
+                                                                <p><a href="#">Brennan Prill:</a> This guy has been
+                                                                    going 100+ MPH on side streets. <br>
+                                                                    <small class="text-muted">August 6, 2016 @ 10:35am
+                                                                    </small>
+                                                                </p>
                                                             </div>
                                                         </div>
                                                     </div>
@@ -139,7 +141,11 @@
                                             </div>
                                         </div>
                                     </li>
-                                </ul><button class="btn btn-default" type="button" style="margin-left:601px;margin-top:-9px;">Add Comment</button></div>
+                                </ul>
+                                <button class="btn btn-default" type="button"
+                                        style="margin-left:601px;margin-top:-9px;">Add Comment
+                                </button>
+                            </div>
                         </div>
                     </div>
                 </div>
@@ -147,7 +153,7 @@
         </div>
     </div>
 </div>
-    <communication:chatWindow orientation="right"></communication:chatWindow>
+<communication:chatWindow orientation="right" />
 </body>
 
 </html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp
index d67bfa0b603a4d3ab4a805976c19bc16b3c70bf6..55567371949904fc7116ef7cf01bab56f50def4a 100644
--- a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp
@@ -1,7 +1,8 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 <%--suppress XmlDuplicatedId --%>
-
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 
 
 <!--todo: E-mail an Studenten als Notifikation für Phasenwechsel -->
@@ -11,54 +12,22 @@
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <link rel="stylesheet" href="../assets/css/footer.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-    <script src="../assets/js/footer.js"></script>
-    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
-    <script src="../assets/js/utility.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/project-student.js"></script>
-    <script src="../assets/js/Sidebar-Menu.js"></script>
+    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
+
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
 
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">Project 1</h1>
-        </div>
-        <div align="right" class="dropdown">
-            <button style= "position: absolute; right: 50px;" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
-
-                <i class="glyphicon glyphicon-envelope"></i>
-            </button>
-
-            <ul class="dropdown-menu">
-                <li><a class="viewfeedback" role="button">Feedback A</a></li>
-                <li><a class="viewfeedback" role="button">Feedback B</a></li>
-                <li><a class="viewfeedback" role="button">Feedback C</a></li>
-            </ul>
-
-            <a href="#">
-                <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-right:30px;margin-top:3px;"></span>
-            </a>
-
-        </div>
+        <headLine:headLine/>
         <div>
             <table>
                 <tr>
-                    <td  id="yourContent">
+                    <td id="yourContent">
                         <h1>Feedbackable Students</h1>
                         <!-- here will be all the content -->
                         <table id="myGroupMembers">
@@ -74,13 +43,15 @@
                                         <li>
                                             Projektübersicht hochgeladen
                                             <a class="annotationview" role="button">
-                                            <label style="font-size:10px;"><i class="far fa-comments" style="font-size:15px;"></i>feedback</label>
+                                                <label style="font-size:10px;"><i class="far fa-comments"
+                                                                                  style="font-size:15px;"></i>feedback</label>
                                             </a>
                                         </li>
                                         <li>
                                             Blumen ins Hausaufgabenheft geklebt
                                             <a class="annotationview" role="button">
-                                                <label style="font-size:10px;"><i class="far fa-comments" style="font-size:15px;"></i>feedback</label>
+                                                <label style="font-size:10px;"><i class="far fa-comments"
+                                                                                  style="font-size:15px;"></i>feedback</label>
                                             </a>
                                         </li>
                                         </a>
@@ -97,19 +68,22 @@
                                         <li>
                                             Blumen an Vegetarier verfüttert
                                             <a class="annotationview" role="button">
-                                                <label style="font-size:10px;"><i class="far fa-comments" style="font-size:15px;"></i>feedback</label>
+                                                <label style="font-size:10px;"><i class="far fa-comments"
+                                                                                  style="font-size:15px;"></i>feedback</label>
                                             </a>
                                         </li>
                                         <li>
                                             Literaturverzeichnis hochgeladen
                                             <a class="annotationview" role="button">
-                                                <label style="font-size:10px;"><i class="far fa-comments" style="font-size:15px;"></i>feedback</label>
+                                                <label style="font-size:10px;"><i class="far fa-comments"
+                                                                                  style="font-size:15px;"></i>feedback</label>
                                             </a>
                                         </li>
                                         <li>
                                             Die armen Vegetarier
                                             <a class="annotationview" role="button">
-                                                <label style="font-size:10px;"><i class="far fa-comments" style="font-size:15px;"></i>feedback</label>
+                                                <label style="font-size:10px;"><i class="far fa-comments"
+                                                                                  style="font-size:15px;"></i>feedback</label>
                                             </a>
                                         </li>
                                     </ul>
@@ -125,7 +99,8 @@
                                         <li>
                                             "Viva la Floristika" - Titel hochgeladen
                                             <a class="annotationview" role="button">
-                                                <label style="font-size:10px;"><i class="far fa-comments" style="font-size:15px;"></i>feedback</label>
+                                                <label style="font-size:10px;"><i class="far fa-comments"
+                                                                                  style="font-size:15px;"></i>feedback</label>
                                             </a>
                                         </li>
                                     </ul>
@@ -143,7 +118,7 @@
                         </script>
 
                     </td>
-                    <td  id="chat">
+                    <td id="chat">
                         <div class="card">
                             <div class="card-header">
                                 <h6 class="mb-0">Gruppen+Projekt Chat</h6>
diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig
deleted file mode 100644
index 79ff3d3adb039143a4b44e810eddd80c2d1906c6..0000000000000000000000000000000000000000
--- a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig
+++ /dev/null
@@ -1,221 +0,0 @@
-<<<<<<< HEAD
-<%--suppress XmlDuplicatedId --%>
-=======
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-
->>>>>>> PeerAssessmentAxel
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
-
-<!DOCTYPE html>
-<html>
-
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <link rel="stylesheet" href="../assets/css/footer.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
-<<<<<<< HEAD
-    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
-    <script src="../assets/js/utility.js"></script>
-    <script src="../assets/js/project-student.js"></script>
-=======
-    <script src="../assets/js/jquery.min.js"></script>
-    <script src="../assets/js/footer.js"></script>
-    <script src="../assets/bootstrap/js/bootstrap.min.js"></script>
-    <script src="../assets/js/Sidebar-Menu.js"></script>
->>>>>>> PeerAssessmentAxel
-</head>
-
-<body>
-<div id="wrapper">
-    <menu:menu></menu:menu>
-
-    <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">Project 1</h1>
-        </div>
-        <div align="right" class="dropdown">
-            <button style= "position: absolute; right: 50px;" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
-
-                <i class="glyphicon glyphicon-envelope"></i>
-            </button>
-
-            <ul class="dropdown-menu">
-                <li><a class="viewfeedback" role="button">Feedback A</a></li>
-                <li><a class="viewfeedback" role="button">Feedback B</a></li>
-                <li><a class="viewfeedback" role="button">Feedback C</a></li>
-            </ul>
-
-            <a href="#">
-                <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-right:30px;margin-top:3px;"></span>
-            </a>
-
-        </div>
-        <div>
-            <table>
-                <tr>
-                    <td  id="yourContent">
-                        <h1>Feedbackable Students</h1>
-                        <!-- here will be all the content -->
-                        <table>
-                            <tr>
-
-                                <td width="100px" valign="top">
-                                    <h3>student1</h3>
-                                    <img src="../assets/img/1.jpg">
-                                    <a href="#">student1@uni.de</a>
-                                    <hr>
-                                    <ul>
-
-                                        <li><a class="annotationview" role="button">
-                                            Projektuebersicht hochgeladen
-                                            <i class="far fa-comments"></i>
-                                            </a>
-                                        </li>
-                                        <li><a class="annotationview" role="button">
-                                            Blumen ins Hausaufgabenheft geklebt
-                                            <i class="far fa-comments"></i>
-                                            </a>
-                                        </li>
-                                        </a>
-                                    </ul>
-                                </td>
-                                <td></td>
-
-                                <td width="100px" valign="top">
-                                    <h3>student2</h3>
-                                    <img src="../assets/img/2.jpg">
-                                    <a href="#">student2@uni.de</a>
-                                    <hr>
-                                    <ul>
-                                        <li><a class="annotationview" role="button">
-                                            Blumen an Vegetarier verfuettert
-                                            <i class="far fa-comments"></i>
-                                        </a></li>
-                                        <li><a class="annotationview" role="button">
-                                            Literaturverzeichnis hochgeladen
-                                            <i class="far fa-comments"></i>
-                                            </a></li>
-                                        <li><a class="annotationview" role="button">
-                                            Die armen Vegetarier
-                                            <i class="far fa-comments"></i>
-                                            </a></li>
-                                    </ul>
-                                </td>
-                                <td></td>
-
-                                <td width="100px" valign="top">
-                                    <h3>student3</h3>
-                                    <img src="../assets/img/3.jpg">
-                                    <a href="#">student3@uni.de</a>
-                                    <hr>
-                                    <ul>
-                                        <li><a class="annotationview" role="button">
-                                            "Viva la Floristika" - Titel hochgeladen
-                                            <i class="far fa-comments"></i>
-                                            </a>
-                                        </li>
-                                    </ul>
-                                </td>
-
-                            </tr>
-                        </table>
-
-                        <button onclick="goBack()" class="btn btn-secondary">Zurueck</button>
-
-                        <script>
-                            function goBack() {
-                                window.history.back();
-                            }
-                        </script>
-
-                    </td>
-                    <td  id="chat">
-                        <div class="card">
-                            <div class="card-header">
-                                <h6 class="mb-0">Gruppen+Projekt Chat</h6>
-                            </div>
-                            <div class="card-body">
-                                <ul class="list-group">
-                                    <li class="list-group-item">
-                                        <div class="media">
-                                            <div></div>
-                                            <div class="media-body">
-                                                <div class="media" style="overflow:visible;">
-                                                    <div><img src="../assets/img/1.jpg" class="mr-3"
-                                                              style="width: 25px; height:25px;"></div>
-                                                    <div class="media-body" style="overflow:visible;">
-                                                        <div class="row">
-                                                            <div class="col-md-12">
-                                                                <p><a href="#">Sara Doe:</a> This guy has been going
-                                                                    100+ MPH on side streets. <br>
-                                                                    <small class="text-muted">August 6, 2016 @ 10:35am
-                                                                    </small>
-                                                                </p>
-                                                            </div>
-                                                        </div>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </li>
-                                    <li class="list-group-item">
-                                        <div class="media">
-                                            <div></div>
-                                            <div class="media-body">
-                                                <div class="media" style="overflow:visible;">
-                                                    <div><img src="../assets/img/2.jpg" class="mr-3"
-                                                              style="width: 25px; height:25px;"></div>
-                                                    <div class="media-body" style="overflow:visible;">
-                                                        <div class="row">
-                                                            <div class="col-md-12">
-                                                                <p><a href="#">Brennan Prill:</a> This guy has been
-                                                                    going 100+ MPH on side streets. <br>
-                                                                    <small class="text-muted">August 6, 2016 @ 10:35am
-                                                                    </small>
-                                                                </p>
-                                                            </div>
-                                                        </div>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </li>
-                                </ul>
-                                <button class="btn btn-light">
-                                    Add Comment
-                                </button>
-                            </div>
-                        </div>
-                    </td>
-                </tr>
-            </table>
-        </div>
-    </div>
-    <footer>
-        <div class="container">
-            <div class="progress">
-                <div class="progress-bar pg-enrollment" role="progressbar" id="progressbar">
-                </div>
-                <div>
-                    Assessment - Präsentationsphase - Dossier - Reflexionsphase - Feedbackphase - Gruppenbildung -  Kursanmeldung
-                </div>
-                <div class="progress-bar pg-rest" role="progressbar">
-                </div>
-            </div>
-            <button id="nextPhase" class="btn btn-light">nächste Phase</button>
-        </div>
-    </footer>
-</div>
-
-</body>
-
-</html>
\ No newline at end of file
diff --git a/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp b/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp
index 1cbd97668612b785995299c089e0dc8313a71732..50431a5333efaf8cfbe617b8c561a1828a63aac2 100644
--- a/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp
@@ -1,42 +1,23 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 <%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script>
     <script src="https://cdn.rawgit.com/showdownjs/showdown/1.8.5/dist/showdown.min.js"></script>
     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css">
     <script src="../assets/js/rateContribution.js"></script>
-    <script src="../assets/js/utility.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">project1
-                <a href="#">
-                <span class="glyphicon glyphicon-envelope"
-                      style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-                </a>
-                <a href="#">
-                    <span class="glyphicon glyphicon-cog"
-                          style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-                </a></h1>
-        </div>
+        <headLine:headLine/>
         <div>
             <table>
                 <tr>
@@ -52,44 +33,51 @@
                             </tr>
                             <tr>
                                 <td>
-                                    Lernzieltagebuch:
-                                    Lernen ist wie Rudern gegen den Strom. Hört man damit auf, treibt man zurück.
-                                    <textarea id="ejournalFeedback">
+                                    <div class="contributionRating" id="eJournal">
+                                        Lernzieltagebuch:
+                                        Lernen ist wie Rudern gegen den Strom. Hört man damit auf, treibt man zurück.
+                                        <textarea id="ejournalFeedback">
 				                        meine Bewertung
 			                        </textarea>
-                                    <label><input type="radio" name="ejournalRating">Perfekt</label>
-                                    <label><input type="radio" name="ejournalRating">Makellos</label>
-                                    <label><input type="radio" name="ejournalRating">regulär</label>
-                                    <label><input type="radio" name="ejournalRating">Makelhaft</label>
-                                    <label><input type="radio" name="ejournalRating">Lädiert</label>
+                                        <label><input type="radio" name="eJournal" value="5">Perfekt</label>
+                                        <label><input type="radio" name="eJournal" value="4">Makellos</label>
+                                        <label><input type="radio" name="eJournal" value="3">regulär</label>
+                                        <label><input type="radio" name="eJournal" value="2">Makelhaft</label>
+                                        <label><input type="radio" name="eJournal" value="1">Lädiert</label>
+                                    </div>
                                 </td>
                             </tr>
                             <tr>
                                 <td>
-                                    Dossier:
-                                    Die meisten Menschen sind bereit zu lernen, aber nur die wenigsten, sich belehren zu
-                                    lassen.
-                                    <textarea id="dossierFeedback">
+                                    <div class="contributionRating" id="Dossier">
+                                        Dossier:
+                                        Die meisten Menschen sind bereit zu lernen, aber nur die wenigsten, sich
+                                        belehren zu
+                                        lassen.
+                                        <textarea id="dossierFeedback">
 				                        meine Bewertung
 			                        </textarea>
-                                    <label><input type="radio" name="dossierlRating">Perfekt</label>
-                                    <label><input type="radio" name="dossierRating">Makellos</label>
-                                    <label><input type="radio" name="dossierRating">regulär</label>
-                                    <label><input type="radio" name="dossierRating">Makelhaft</label>
-                                    <label><input type="radio" name="dossierRating">Lädiert</label>
+                                        <label><input type="radio" name="dossier" value="5">Perfekt</label>
+                                        <label><input type="radio" name="dossier" value="4">Makellos</label>
+                                        <label><input type="radio" name="dossier" value="3">regulär</label>
+                                        <label><input type="radio" name="dossier" value="2">Makelhaft</label>
+                                        <label><input type="radio" name="dossier" value="1">Lädiert</label>
+                                    </div>
                                 </td>
                             </tr>
                             <tr>
                                 <td>
-                                    Präsentation: <a href="#"><i class="fa fa-paperclip"></i></a>
-                                    <textarea id="presentationFeedback">
+                                    <div class="contributionRating" id="research">
+                                        Präsentation: <a href="#"><i class="fa fa-paperclip"></i></a>
+                                        <textarea id="presentationFeedback">
 				                        meine Bewertung
 			                        </textarea>
-                                    <label><input type="radio" name="presentationRating">Perfekt</label>
-                                    <label><input type="radio" name="presentationRating">Makellos</label>
-                                    <label><input type="radio" name="presentationRating">regulär</label>
-                                    <label><input type="radio" name="presentationRating">Makelhaft</label>
-                                    <label><input type="radio" name="presentationRating">Lädiert</label>
+                                        <label><input type="radio" name="research" value="5">Perfekt</label>
+                                        <label><input type="radio" name="research" value="4">Makellos</label>
+                                        <label><input type="radio" name="research" value="3">regulär</label>
+                                        <label><input type="radio" name="research" value="2">Makelhaft</label>
+                                        <label><input type="radio" name="research" value="1">Lädiert</label>
+                                    </div>
                                 </td>
                             </tr>
                         </table>
diff --git a/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp b/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp
index 9ddb24242d7dbd999ff642237437caf061612c30..0eb33c1eaf3afbddc608bf14f0ce7c50692e380d 100644
--- a/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp
@@ -1,43 +1,26 @@
-<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
+<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %>
 <!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/takeQuiz.js"></script>
-    <script src="../assets/js/utility.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
+
 </head>
 
 <body>
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">project1
-                <a href="#">
-                <span class="glyphicon glyphicon-envelope"
-                      style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-                </a>
-                <a href="#">
-                    <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-                </a></h1>
-        </div>
+        <headLine:headLine/>
         <div>
             <table>
                 <tr>
                     <td  id="yourContent">
-                        <h1>Quiz for project1 </h1>
+                        <h1>Quiz for gemeinsamForschen </h1>
                         <!-- here will be all the content -->
 
 
diff --git a/gemeinsamforschen/src/main/webapp/pages/viewQuiz.jsp b/gemeinsamforschen/src/main/webapp/pages/viewQuiz.jsp
index a484d9381f9a963ff485ca311cae45714c357b14..e105590e4a126bb3c2c390e9c9db96ff145dee07 100644
--- a/gemeinsamforschen/src/main/webapp/pages/viewQuiz.jsp
+++ b/gemeinsamforschen/src/main/webapp/pages/viewQuiz.jsp
@@ -1,39 +1,22 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
-<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%>
-<!DOCTYPE html>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %>
+<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %><!DOCTYPE html>
 <html>
 
 <head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <title>muster-gemeinsam-forschen</title>
-    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
-    <link rel="stylesheet" href="../assets/css/styles.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
+    <omniDependencies:omniDependencies/>
     <script src="../assets/js/viewQuiz.js"></script>
-    <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css">
-    <link rel="stylesheet" href="../assets/css/Community-ChatComments.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css">
-    <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css">
+
 </head>
 
 <body>
 
 
 <div id="wrapper">
-    <menu:menu></menu:menu>
+    <menu:menu/>
     <div class="page-content-wrapper">
-        <div class="container-fluid">
-            <h1 id="projectId">project1
-                <a href="#">
-                <span class="glyphicon glyphicon-envelope"
-                      style="font-size:27px;margin-top:-17px;margin-left:600px;"></span>
-                </a>
-                <a href="#">
-                    <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span>
-                </a></h1>
-        </div>
+        <headLine:headLine/>
         <div>
             <table>
                 <tr>
diff --git a/gemeinsamforschen/src/main/webapp/session/session_example_1.jsp b/gemeinsamforschen/src/main/webapp/session/session_example_1.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..4f2ddf97366c1617b8aad74c34fe72937b36fea1
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/session/session_example_1.jsp
@@ -0,0 +1,18 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: dehne
+  Date: 23.07.2018
+  Time: 13:51
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="gf" uri="../core/pages/gemeinsamForschen.tld" %>
+<html>
+<head>
+    <title>Title</title>
+</head>
+<body>
+    <gf:session></gf:session>
+    <a href="session_example_2.jsp">click mich</a>
+</body>
+</html>
diff --git a/gemeinsamforschen/src/main/webapp/session/session_example_2.jsp b/gemeinsamforschen/src/main/webapp/session/session_example_2.jsp
new file mode 100644
index 0000000000000000000000000000000000000000..a6e570bc3814fac53418a447f95854fe729a2224
--- /dev/null
+++ b/gemeinsamforschen/src/main/webapp/session/session_example_2.jsp
@@ -0,0 +1,17 @@
+<%--
+  Created by IntelliJ IDEA.
+  User: dehne
+  Date: 23.07.2018
+  Time: 13:51
+  To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+<%@ taglib prefix="gf" uri="../core/pages/gemeinsamForschen.tld" %>
+<html>
+<head>
+    <title>Big Deal</title>
+</head>
+<body>
+    <gf:context/>
+</body>
+</html>
diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
index e0de36c8ad91abac6c99ba248635c87a0919a898..0d5dfe1643c376e6ac1cdfa6f56451bbc9809633 100644
--- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
+++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
@@ -8,19 +8,22 @@ USE `fltrail`;
 
 CREATE TABLE if not exists `projects` (
 
-  `id`            varchar(400) NOT NULL,
+  `id`            varchar(100) NOT NULL,
 
   `password`      varchar(400) NOT NULL,
 
-  `active`        tinyint(1) NOT NULL,
+  `active`        tinyint(1)   NOT NULL,
 
-  `timecreated`   timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `timecreated`   timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP
+  ON UPDATE CURRENT_TIMESTAMP,
 
   `author`        varchar(400) NOT NULL,
 
   `adminPassword` varchar(400) NOT NULL,
 
-  `token`         varchar(400) NOT NULL
+  `token`         varchar(400) NOT NULL,
+
+  `phase`         varchar(400) NOT NULL
 
 )
 
@@ -60,7 +63,7 @@ CREATE TABLE if not exists groupuser
 
 CREATE TABLE if not exists `tags` (
 
-  `projectId` varchar(400) NOT NULL,
+  `projectId` varchar(100) NOT NULL,
 
   `tag`       varchar(400) NOT NULL
 
@@ -72,7 +75,7 @@ CREATE TABLE if not exists `tags` (
 
 CREATE TABLE if not exists `users` (
 
-  `name`                varchar(400) NOT NULL,
+  `name`                varchar(100) NOT NULL,
 
   `password`            varchar(200) NOT NULL,
 
@@ -96,53 +99,150 @@ CREATE TABLE if not exists projectuser
 
 (
 
-  projectId varchar(400) NOT NULL,
+  projectId varchar(100) NOT NULL,
 
-  userId    varchar(400) NOT NULL
+  userId    varchar(100) NOT NULL
 
 )
 
   ENGINE = InnoDB
 
-  DEFAULT CHARSET = utf8;CREATE TABLE if not exists `annotations` (
+  DEFAULT CHARSET = utf8;
 
+CREATE TABLE if not exists `annotations` (
   `id` varchar(120) NOT NULL,
-
   `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-
-  `userId` int(11) DEFAULT NULL,
-
+  `userToken` varchar(120) DEFAULT NULL,
   `targetId` int(11) DEFAULT NULL,
-
-  `body` varchar(280) DEFAULT NULL,
-
+  `title` varchar(120) DEFAULT NULL,
+  `comment` varchar(400) DEFAULT NULL,
   `startCharacter` int(11) DEFAULT NULL,
-
   `endCharacter` int(11) DEFAULT NULL,
-
   PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;alter table users
+alter table users
 
   add isStudent tinyint(1) default '1' null;
+
 CREATE TABLE if not exists quiz
 
 (
 
-  author varchar(400) NOT NULL,
+  author    varchar(400) NOT NULL,
+
+  projectId varchar(400) NOT NULL,
+
+  question  varchar(400) NOT NULL,
+
+  mcType    varchar(400) NOT NULL,
+
+  answer    varchar(400) NOT NULL,
+
+  correct   tinyint(1)   NOT NULL
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+CREATE TABLE if not exists grades
+
+(
+
+  projectId varchar(400) NOT NULL,
+
+  studentId varchar(400) NOT NULL,
+
+  grade double NOT NULL
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists tasks
+
+(
+
+  userId    varchar(400) NOT NULL,
 
   projectId varchar(400) NOT NULL,
 
-  question varchar(400) NOT NULL,
+  taskUrl   varchar(400) NOT NULL
+)
 
-  mcType varchar(400) NOT NULL,
+  ENGINE = InnoDB
 
-  answer varchar(400) NOT NULL,
+  DEFAULT CHARSET = utf8;
 
-  correct tinyint(1) NOT NULL
 
+CREATE TABLE if not exists phasesSelected (
+ `projectId`    varchar(100) NOT NULL,
+  phaseSelected varchar(200) NOT NULL
 )
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists categoriesSelected (
+  `projectId`    varchar(100) NOT NULL,
+   categorySelected varchar(200) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
 
+CREATE TABLE if not exists groupfindingMechanismSelected (
+  `projectId`    varchar(100) NOT NULL,
+   gfmSelected   varchar(200) NOT NULL
+)
   ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
 
+CREATE TABLE if not exists assessmentMechanismSelected (
+  `projectId`    varchar(100) NOT NULL,
+   amSelected    varchar(200) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+ALTER TABLE `projectuser`
+  ADD INDEX (`projectId`, `userId`);
+ALTER TABLE `projectuser`
+  ADD UNIQUE (`projectId`, `userId`);
+ALTER TABLE `projects`
+  ADD UNIQUE (`id`);
+
+CREATE TABLE if not exists answeredquiz (
+  `projectId`    varchar(400) NOT NULL,
+  `studentId`   varchar(400) NOT NULL,
+  `question`   varchar(400) NOT NULL,
+  `correct`   tinyint(4) NOT NULL
+
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists workrating (
+  `projectId`    varchar(400) NOT NULL,
+  `studentId`   varchar(400) NOT NULL,
+  `fromPeer`   varchar(400) NOT NULL,
+  `responsibility`   int(11) NOT NULL,
+  `partOfWork`   int(11) NOT NULL,
+  `cooperation`   int(11) NOT NULL,
+  `communication`   int(11) NOT NULL,
+  `autonomous`   int(11) NOT NULL
+
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists contributionrating (
+  `projectId`    varchar(400) NOT NULL,
+  `studentId`   varchar(400) NOT NULL,
+  `fromPeer`   varchar(400) NOT NULL,
+  `dossier`   int(11) NOT NULL,
+  `eJournal`   int(11) NOT NULL,
+  `research`   int(11) NOT NULL
+)
+  ENGINE = InnoDB
   DEFAULT CHARSET = utf8;
\ No newline at end of file
diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql.orig b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql.orig
new file mode 100644
index 0000000000000000000000000000000000000000..0a4cf820cd2c5dae6d31fc8cb069ef2a37005018
--- /dev/null
+++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql.orig
@@ -0,0 +1,218 @@
+CREATE DATABASE IF NOT EXISTS `fltrail`
+
+  DEFAULT CHARACTER SET utf8
+
+  COLLATE utf8_general_ci;
+
+USE `fltrail`;
+
+CREATE TABLE if not exists `projects` (
+
+  `id`            varchar(100) NOT NULL,
+
+  `password`      varchar(400) NOT NULL,
+
+  `active`        tinyint(1)   NOT NULL,
+
+  `timecreated`   timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP
+  ON UPDATE CURRENT_TIMESTAMP,
+
+  `author`        varchar(400) NOT NULL,
+
+  `adminPassword` varchar(400) NOT NULL,
+
+  `token`         varchar(400) NOT NULL,
+
+  `phase`         varchar(400) NOT NULL
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists `groups` (
+
+  `id`         int          NOT NULL AUTO_INCREMENT,
+
+  `projectId`  varchar(400) NOT NULL,
+
+  `chatRoomId` varchar(400) NOT NULL,
+
+  PRIMARY KEY (id)
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists groupuser
+
+(
+
+  userEmail varchar(400) NOT NULL,
+
+  groupId   int          NOT NULL
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists `tags` (
+
+  `projectId` varchar(100) NOT NULL,
+
+  `tag`       varchar(400) NOT NULL
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists `users` (
+
+  `name`                varchar(100) NOT NULL,
+
+  `password`            varchar(200) NOT NULL,
+
+  `email`               varchar(255) NOT NULL,
+
+  `token`               varchar(800) NOT NULL,
+
+  `rocketChatId`        varchar(400) NOT NULL,
+
+  `rocketChatAuthToken` varchar(800) NOT NULL,
+
+  UNIQUE (email)
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists projectuser
+
+(
+
+  projectId varchar(100) NOT NULL,
+
+  userId    varchar(100) NOT NULL
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists `annotations` (
+  `id` varchar(120) NOT NULL,
+  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `userToken` varchar(120) DEFAULT NULL,
+  `targetId` int(11) DEFAULT NULL,
+  `title` varchar(120) DEFAULT NULL,
+  `comment` varchar(400) DEFAULT NULL,
+  `startCharacter` int(11) DEFAULT NULL,
+  `endCharacter` int(11) DEFAULT NULL,
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+alter table users
+
+  add isStudent tinyint(1) default '1' null;
+
+CREATE TABLE if not exists quiz
+
+(
+
+  author    varchar(400) NOT NULL,
+
+  projectId varchar(400) NOT NULL,
+
+  question  varchar(400) NOT NULL,
+
+  mcType    varchar(400) NOT NULL,
+
+  answer    varchar(400) NOT NULL,
+
+  correct   tinyint(1)   NOT NULL
+
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists tasks
+
+(
+
+  userId    varchar(400) NOT NULL,
+
+  projectId varchar(400) NOT NULL,
+
+  taskUrl   varchar(400) NOT NULL
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+
+
+CREATE TABLE if not exists phasesSelected (
+ `projectId`    varchar(100) NOT NULL,
+  phaseSelected varchar(200) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists categoriesSelected (
+  `projectId`    varchar(100) NOT NULL,
+   categorySelected varchar(200) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists groupfindingMechanismSelected (
+  `projectId`    varchar(100) NOT NULL,
+   gfmSelected   varchar(200) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists assessmentMechanismSelected (
+  `projectId`    varchar(100) NOT NULL,
+   amSelected    varchar(200) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+<<<<<<< HEAD
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists grades
+
+(
+
+  projectId varchar(400) NOT NULL,
+
+  studentId varchar(400) NOT NULL,
+
+  grade double NOT NULL
+)
+
+  ENGINE = InnoDB
+
+  DEFAULT CHARSET = utf8;
+=======
+ALTER TABLE `projectuser`
+  ADD INDEX (`projectId`, `userId`);
+ALTER TABLE `projectuser`
+  ADD UNIQUE (`projectId`, `userId`);
+ALTER TABLE `projects`
+  ADD UNIQUE (`id`);
+>>>>>>> origin/session_management
diff --git a/gemeinsamforschen/src/scripts/dbschema/journal.sql b/gemeinsamforschen/src/scripts/dbschema/journal.sql
new file mode 100644
index 0000000000000000000000000000000000000000..16f050b3c5bba8230a1e136ffa4c86876c9f935d
--- /dev/null
+++ b/gemeinsamforschen/src/scripts/dbschema/journal.sql
@@ -0,0 +1,36 @@
+USE `fltrail`;
+
+CREATE TABLE if not exists `journals` (
+  `id`         varchar(400) NOT NULL,
+  `timestamp`  timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP
+  ON UPDATE CURRENT_TIMESTAMP,
+  `author`     varchar(400) NOT NULL,
+  `project`    varchar(400) NOT NULL,
+  `text`       text,
+  `visibility` varchar(50),
+  `category`   varchar(50),
+  `open`       TINYINT(1)
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists `projectDescription` (
+  `id`         varchar(400) NOT NULL,
+  `timestamp`  timestamp    NOT NULL DEFAULT CURRENT_TIMESTAMP
+  ON UPDATE CURRENT_TIMESTAMP,
+  `author`     varchar(400) NOT NULL,
+  `project`    varchar(400) NOT NULL,
+  `text`       text,
+  `open`       TINYINT(1)
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
+
+CREATE TABLE if not exists `links` (
+  `id`         varchar(400) NOT NULL,
+  `projecdesription`     varchar(400) NOT NULL,
+  `name`       varchar(50) NOT NULL,
+  `link`       varchar(50) NOT NULL
+)
+  ENGINE = InnoDB
+  DEFAULT CHARSET = utf8;
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bd1d7a2e0f059759079914b2ab766f590df6bef
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java
@@ -0,0 +1,263 @@
+package unipotsdam.gf.interfaces;
+
+import org.glassfish.hk2.api.ServiceLocator;
+import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.MockitoRule;
+import uk.co.jemos.podam.api.PodamFactory;
+import uk.co.jemos.podam.api.PodamFactoryImpl;
+import unipotsdam.gf.config.GFApplicationBinder;
+import unipotsdam.gf.core.management.Management;
+import unipotsdam.gf.core.management.group.Group;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.project.ProjectConfiguration;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.core.states.ProjectPhase;
+import unipotsdam.gf.modules.assessment.QuizAnswer;
+import unipotsdam.gf.modules.assessment.controller.model.StudentAndQuiz;
+import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism;
+import unipotsdam.gf.modules.groupfinding.GroupfindingCriteria;
+import unipotsdam.gf.modules.journal.model.Journal;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+import unipotsdam.gf.modules.peer2peerfeedback.Peer2PeerFeedback;
+import unipotsdam.gf.modules.researchreport.ResearchReport;
+import unipotsdam.gf.modules.researchreport.ResearchReportManagement;
+import javax.inject.Inject;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+
+
+@RunWith(MockitoJUnitRunner.class)
+public class ActivityFlowTest {
+
+    /**
+     * Utility to creaty dummy data for students
+     */
+    PodamFactory factory = new PodamFactoryImpl();
+
+    @Inject
+    Management management;
+
+    @Inject
+    ResearchReportManagement researchReportManagement;
+
+
+    @Inject
+    Feedback feedback;
+
+    @Inject
+    IPhases phases;
+
+    @Inject
+    IGroupFinding groupFinding;
+
+    @Inject
+    ICommunication iCommunication;
+
+    @Inject
+    IJournal iJournal;
+
+    @Inject
+    IPeerAssessment iPeerAssessment;
+
+
+    private final Project project = factory.manufacturePojo(Project.class);
+    private final ArrayList<User> students = new ArrayList<>();
+    private final User teacher = factory.manufacturePojo(User.class);
+
+    @Rule
+    public MockitoRule mockitoRule = MockitoJUnit.rule();
+
+
+
+    @Before
+    public void setUp() {
+        final ServiceLocator locator = ServiceLocatorUtilities.bind(new GFApplicationBinder());
+        locator.inject(this);
+
+        feedback = Mockito.spy(feedback);
+        researchReportManagement = Mockito.spy(researchReportManagement);
+        phases = Mockito.spy(phases);
+        iCommunication = Mockito.spy(iCommunication);
+
+        // TODO @Julian: Find out more elegant way of doing this
+        researchReportManagement.setFeedback(feedback);
+        phases.setFeedback(feedback);
+
+    }
+
+    @Test
+    public void activityPlayer() {
+        // register teacher
+        loginTeacher();
+
+        // create course
+        createCourse();
+
+        // register students
+        loginStudents();
+
+        // form groups
+        formGroups();
+
+        // end first phase
+        phases.endPhase(ProjectPhase.CourseCreation, project);
+
+        // upload dossiers
+        uploadDossiers();
+
+        // end first phase
+        phases.endPhase(ProjectPhase.DossierFeedback, project);
+
+        // update reflections
+        uploadReflections();
+
+        // end execution phase
+        phases.endPhase(ProjectPhase.Execution, project);
+    }
+
+
+
+    public void formGroups() {
+
+        // form groups based on user profil
+        groupFinding.formGroups(GroupFormationMechanism.UserProfilStrategy);
+
+        // update groups manually
+        groupFinding.formGroups(GroupFormationMechanism.Manual);
+
+    }
+
+
+    public void loginTeacher() {
+        teacher.setStudent(false);
+        management.create(teacher, null);
+    }
+
+
+    public void loginStudents() {
+        for (int i=0;i<100;i++) {
+            User student = factory.manufacturePojo(User.class);
+            student.setStudent(true);
+            students.add(student);
+            management.create(student, null);
+        }
+    }
+
+    public void uploadReflections() {
+        // update single reflection
+        Journal journalEntry = factory.manufacturePojo(Journal.class);
+
+        for (User student : students) {
+            iJournal.uploadJournalEntry(journalEntry, student);
+        }
+
+
+        // create quiz TODO@Axel this should be a quiz dependend on the student for easier initialization and
+        // de-coupling
+        //StudentAndQuiz studentAndQuiz = factory.manufacturePojo(StudentAndQuiz.class);
+        //QuizAnswer quizAnswer = factory.manufacturePojo(QuizAnswer.class);
+        //iPeerAssessment.createQuiz(studentAndQuiz);
+        //iPeerAssessment.answerQuiz(studentAndQuiz, quizAnswer);
+
+        // finales Portfolio zusammenstellen
+        java.util.List<Journal> journalEntries = new ArrayList<Journal>();
+        journalEntries.add(journalEntry);
+
+        ResearchReport finalResearchReport = factory.manufacturePojo(ResearchReport.class);
+        File presentation = new File("dummy.pptx");
+
+        for (User student : students) {
+            iJournal.uploadFinalPortfolio(project,journalEntries, finalResearchReport, presentation, student);
+        }
+        assertNotNull(true);
+
+    }
+
+    public void uploadDossiers() {
+
+
+        for (User student : students) {
+            // persist dossiers
+            ResearchReport researchReport = factory.manufacturePojo(ResearchReport.class);
+            researchReportManagement.createResearchReport(researchReport, project, student);
+        }
+
+
+        // assert that after the last report has been submitted, the feedback tasks were assigned automatically
+        verify(feedback).assignFeedbackTasks();
+
+        // students give feedback
+        for (User student : students) {
+            ResearchReport feedbackTask = feedback.getFeedbackTask(student);
+            ProjectConfiguration projectConfiguration = management.getProjectConfiguration(project);
+            HashMap<Category, Boolean> criteriaSelected = projectConfiguration.getCriteriaSelected();
+            for (Category category : criteriaSelected.keySet()) {
+                if (criteriaSelected.get(category)) {
+                    Peer2PeerFeedback peer2PeerFeedback = factory.manufacturePojo(Peer2PeerFeedback.class);
+                    peer2PeerFeedback.setFeedbackcategory(category);
+                    feedback.giveFeedback(peer2PeerFeedback, feedbackTask);
+                }
+            }
+        }
+
+        // students upload updated dossier
+        ArrayList<User> students2 = students;
+        students2.remove(2);
+        Iterator<User> students2Iterator = students2.iterator();
+        while (students2Iterator.hasNext()) {
+            User student = students2Iterator.next();
+            // persist final dossiers -- assuming this function is intended
+            // if only one time upload is intended and feedback is not incorporated into a final dossier
+            // you should change this test to reflect only one time upload
+            // i.e. removing one student above to reflect no compliance
+            ResearchReport researchReport = factory.manufacturePojo(ResearchReport.class);
+            researchReportManagement.createFinalResearchReport(researchReport, project, student);
+        }
+
+        // docent finishes phase
+        phases.endPhase(ProjectPhase.DossierFeedback, project);
+
+        // student misses mockfeedback -> reassignment
+        // assert that while reports are still missing mockfeedback tasks are reassigned
+        verify(feedback).assigningMissingFeedbackTasks(project);
+
+        // assert that everybody has given and received mockfeedback
+        assertTrue(feedback.checkFeedbackConstraints(project));
+
+        // docent finishes phase
+        phases.endPhase(ProjectPhase.DossierFeedback, project);
+
+    }
+
+
+    public void createCourse() {
+        // add Titel
+        Project project = factory.manufacturePojo(Project.class);
+        management.create(project);
+
+        ProjectConfiguration projectConfiguration = factory.manufacturePojo(ProjectConfiguration.class);
+        management.create(projectConfiguration, project);
+
+        GroupfindingCriteria groupfindingCriteria = factory.manufacturePojo(GroupfindingCriteria.class);
+        groupFinding.selectGroupfindingCriteria(groupfindingCriteria);
+
+    }
+
+}
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java
index 6c64c0be2de3d76d89849450bb797ab921876b79..d0fde6c5871fd1533cc8e37308ec2e3068343327 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java
@@ -4,6 +4,7 @@ import org.junit.Before;
 import org.junit.Test;
 import unipotsdam.gf.modules.annotation.controller.AnnotationController;
 import unipotsdam.gf.modules.annotation.model.Annotation;
+import unipotsdam.gf.modules.annotation.model.AnnotationBody;
 import unipotsdam.gf.modules.annotation.model.AnnotationPatchRequest;
 import unipotsdam.gf.modules.annotation.model.AnnotationPostRequest;
 
@@ -31,11 +32,12 @@ public class AnnotationTest {
     @Test
     public void testAddAnnotation() {
 
-        // initialize body
-        String body = "body_testAddAnnotation";
+        // initialize title and comment of body
+        String title = "title_testAddAnnotation";
+        String comment = "comment_testAddAnnotation";
 
         // prepare and execute request
-        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(1, 2, body, 4, 5);
+        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest("userToken", 1, new AnnotationBody(title, comment, 1, 2));
         Annotation response = controller.addAnnotation(annotationPostRequest);
 
         // the new annotation should be found in the database
@@ -49,44 +51,52 @@ public class AnnotationTest {
     @Test
     public void testAlterAnnotation() {
 
-        // initialize old and new body
-        String oldBody = "bodyOld_testAlterAnnotation";
-        String newBody = "bodyNew_testAlterAnnotation";
+        // initialize old and new title and comment of body
+        String titleOld = "titleOld_testAlterAnnotation";
+        String commentOld = "commentOld_testAlterAnnotation";
+        String titleNew = "titleNew_testAlterAnnotation";
+        String commentNew = "commentNew_testAlterAnnotation";
 
         // save new annotation in database
-        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, oldBody, 0, 0);
+        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest("userToken", 0, new AnnotationBody(titleOld, commentOld, 1, 2));
         Annotation response = controller.addAnnotation(annotationPostRequest);
 
         // the new annotation should be found in the database
         assertTrue("Can't find annotation with the id " + response.getId(), controller.existsAnnotationId(response.getId()));
 
-        // the annotation's body should be "testAlterAnnotation_oldBody"
-        assertEquals("The body of the annotation should be " + oldBody + " but was " + response.getBody(), oldBody, response.getBody());
+        // the annotation's title should be "titleOld_testAlterAnnotation"
+        assertEquals("The title of the annotation should be " + titleOld + " but was " + response.getBody().getTitle(), titleOld, response.getBody().getTitle());
+
+        // the annotation's comment should be "commentOld_testAlterAnnotation"
+        assertEquals("The comment of the annotation should be " + commentOld + " but was " + response.getBody().getComment(), commentOld, response.getBody().getComment());
 
         // alter the annotation and update the database
-        AnnotationPatchRequest annotationPatchRequest = new AnnotationPatchRequest(newBody);
+        AnnotationPatchRequest annotationPatchRequest = new AnnotationPatchRequest(titleNew, commentNew);
         controller.alterAnnotation(response.getId(), annotationPatchRequest);
 
         // receive the new annotation
         Annotation newResponse = controller.getAnnotation(response.getId());
 
-        // the annotation's body should be "testAlterAnnotation_newBody"
-        assertEquals("The body of the annotation should be " + newBody + " but was " + newResponse.getBody(), newBody, newResponse.getBody());
+        // the annotation's title should be "titleNew_testAlterAnnotation"
+        assertEquals("The title of the annotation should be " + titleNew + " but was " + newResponse.getBody().getTitle(), titleNew, newResponse.getBody().getTitle());
+
+        // the annotation's comment should be "commentNew_testAlterAnnotation"
+        assertEquals("The comment of the annotation should be " + commentNew + " but was " + newResponse.getBody().getComment(), commentNew, newResponse.getBody().getComment());
 
         // delete the annotation
         controller.deleteAnnotation(response.getId());
 
-
     }
 
     @Test
     public void testDeleteAnnotation() {
 
-        // initialize old and new body
-        String body = "body_testDeleteAnnotation";
+        // initialize title and comment of body
+        String title = "title_testDeleteAnnotation";
+        String comment = "comment_testDeleteAnnotation";
 
-        // save new annotation in database
-        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, body, 0, 0);
+        // prepare and execute request
+        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest("userToken", 1, new AnnotationBody(title, comment, 1, 2));
         Annotation response = controller.addAnnotation(annotationPostRequest);
 
         // the new annotation should be found in the database
@@ -103,18 +113,22 @@ public class AnnotationTest {
     @Test
     public void testGetAnnotation() {
 
-        // initialize body
-        String body = "body_testGetAnnotation";
+        // initialize title and comment of body
+        String title = "title_testGetAnnotation";
+        String comment = "comment_testGetAnnotation";
 
-        // save new annotation in database
-        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, body, 0, 0);
+        // prepare and execute request
+        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest("userToken", 1, new AnnotationBody(title, comment, 1, 2));
         Annotation response = controller.addAnnotation(annotationPostRequest);
 
         // receive the new annotation
         Annotation getResponse = controller.getAnnotation(response.getId());
 
-        // the annotation's body should be "testAlterAnnotation_newBody"
-        assertEquals("The body of the annotation should be " + body + " but was " + getResponse.getBody(), body, getResponse.getBody());
+        // the annotation's title should be "title_testAlterAnnotation"
+        assertEquals("The title of the annotation should be " + title + " but was " + response.getBody().getTitle(), title, response.getBody().getTitle());
+
+        // the annotation's comment should be "comment_testAlterAnnotation"
+        assertEquals("The comment of the annotation should be " + comment + " but was " + response.getBody().getComment(), comment, response.getBody().getComment());
 
         // delete the new annotation
         controller.deleteAnnotation(response.getId());
@@ -124,10 +138,9 @@ public class AnnotationTest {
     @Test
     public void testGetAnnotations() {
 
-        // initialize bodys
-        String body1 = "body1_testGetAnnotations";
-        String body2 = "body2_testGetAnnotations";
-        String body3 = "body3_testGetAnnotations";
+        // initialize title and comment of bodys
+        String title = "title_testGetAnnotations";
+        String comment = "comment_testGetAnnotations";
 
         // initialize targetIds
         ArrayList<Integer> targetIds = new ArrayList<>();
@@ -135,23 +148,23 @@ public class AnnotationTest {
         targetIds.add(-2);
 
         // save new annotations in database
-        AnnotationPostRequest request1 = new AnnotationPostRequest(0, targetIds.get(0), body1, 0, 0);
-        AnnotationPostRequest request2 = new AnnotationPostRequest(0, targetIds.get(1), body2, 0, 0);
-        AnnotationPostRequest request3 = new AnnotationPostRequest(0, targetIds.get(1), body3, 0, 0);
+        AnnotationPostRequest request1 = new AnnotationPostRequest("userToken", targetIds.get(0), new AnnotationBody(title, comment, 1, 2));
+        AnnotationPostRequest request2 = new AnnotationPostRequest("userToken", targetIds.get(1), new AnnotationBody(title, comment, 1, 2));
+        AnnotationPostRequest request3 = new AnnotationPostRequest("userToken", targetIds.get(1), new AnnotationBody(title, comment, 1, 2));
         controller.addAnnotation(request1);
         controller.addAnnotation(request2);
         controller.addAnnotation(request3);
 
-        // receive the new annotations
+        // receive the new annotations with targetId = -2
         ArrayList<Annotation> getResponse = controller.getAnnotations(targetIds.get(1));
 
-        // the size of the  getResponse should be 2
+        // the size of the getResponse should be 2
         assertEquals("The size of the response should be 2 but was " + getResponse.size(), 2, getResponse.size());
 
-        // receive the new annotations
+        // receive the new annotations with targetId = -1
         ArrayList<Annotation> getResponseNew = controller.getAnnotations(targetIds.get(0));
 
-        // the size of the  getResponse should be 2
+        // the size of the getResponse should be 1
         assertEquals("The size of the response should be 1 but was " + getResponseNew.size(), 1, getResponseNew.size());
 
         // delete annotations from database
@@ -164,12 +177,13 @@ public class AnnotationTest {
     @Test
     public void testExistsAnnotationId() {
 
-        // initialize body and bad id
-        String body = "body_testExistsAnnotationId";
+        // initialize title and comment of body and bad id
+        String title = "title_testExistsAnnotationId";
+        String comment = "comment_testExistsAnnotationId";
         String badId = "badId";
 
         // save new annotation in database
-        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, body, 0, 0);
+        AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest("userToken", 0, new AnnotationBody(title, comment, 1, 2));
         Annotation response = controller.addAnnotation(annotationPostRequest);
 
         // the annotation shouldn't be found in the database
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java
index 8e71c0dcba017d321a6af5540fb843ea8ff7352c..9fbce54234111c240d671b9fb5e6ea7443201dda 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java
@@ -1,20 +1,40 @@
 package unipotsdam.gf.interfaces;
 
+import javafx.application.Application;
+import org.glassfish.hk2.api.ServiceLocator;
+import org.glassfish.hk2.utilities.Binder;
+import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Before;
 import org.junit.Test;
+import uk.co.jemos.podam.api.PodamFactory;
+import uk.co.jemos.podam.api.PodamFactoryImpl;
+import unipotsdam.gf.config.GFApplicationBinder;
+import unipotsdam.gf.config.GFResourceConfig;
 import unipotsdam.gf.core.management.ManagementImpl;
 import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.project.ProjectConfiguration;
 import unipotsdam.gf.core.management.user.User;
 import unipotsdam.gf.core.management.user.UserProfile;
 
 import java.util.List;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 /**
  * Created by dehne on 01.06.2018.
  */
-public class ManagementTest {
+
+
+public class ManagementTest  {
+
+
+    /**
+     * Utility to creaty dummy data for students
+     */
+    PodamFactory factory = new PodamFactoryImpl();
+
 
     @Test
     public void testDelete() {
@@ -90,6 +110,8 @@ public class ManagementTest {
         management.create(project);
         management.register(user, project, null);
 
+        assertTrue(management.exists(project));
+
         User user2 = new User("julian2", "12345", "from2@stuff.com", true);
         management.create(user2, new UserProfile());
         assert management.exists(user2);
@@ -99,4 +121,20 @@ public class ManagementTest {
         assert !users.isEmpty();
 
     }
+
+    @Test
+    public void testProjectConfiguration() {
+        ProjectConfiguration projectConfiguration = factory.manufacturePojo(ProjectConfiguration.class);
+        Project project = factory.manufacturePojo(Project.class);
+
+        ManagementImpl management = new ManagementImpl();
+        management.create(projectConfiguration, project);
+
+        ProjectConfiguration projectConfiguration1 = management.getProjectConfiguration(project);
+        assertNotNull(projectConfiguration1.getCriteriaSelected());
+        assertNotNull(projectConfiguration1.getAssessmentMechanismSelected());
+        assertNotNull(projectConfiguration1.getGroupMechanismSelected());
+        assertNotNull(projectConfiguration1.getPhasesSelected());
+
+    }
 }
\ No newline at end of file
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/PhaseTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/PhaseTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9d59d39a89bade2431dee22455ef1bcc457c1f2a
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/PhaseTest.java
@@ -0,0 +1,74 @@
+package unipotsdam.gf.interfaces;
+
+import org.glassfish.hk2.api.ServiceLocator;
+import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import unipotsdam.gf.config.GFApplicationBinder;
+import unipotsdam.gf.core.management.ManagementImpl;
+import unipotsdam.gf.core.management.project.Project;
+import unipotsdam.gf.core.management.user.User;
+import unipotsdam.gf.core.management.user.UserProfile;
+import unipotsdam.gf.core.states.ProjectPhase;
+import javax.inject.Inject;
+
+public class PhaseTest {
+
+    @Inject
+    private IPhases phases;
+
+
+    @Before
+    public void setUp() {
+        final ServiceLocator locator = ServiceLocatorUtilities.bind(new GFApplicationBinder());
+        locator.inject(this);
+    }
+
+    @BeforeClass
+    public static void prepareProject() {
+        ManagementImpl management = new ManagementImpl();
+        User user = new User("julian", "1234", "from@stuff.com", false);
+        management.create(user, new UserProfile());
+        assert management.exists(user);
+
+        Project project = new Project("Gemainsam Forschen", "1235", true, "me", "keins");
+        management.create(project);
+        management.register(user, project, null);
+    }
+
+    @Test
+    public void phase1() {
+        Project project = new Project();
+        project.setId("Gemainsam Forschen");
+        phases.endPhase(ProjectPhase.CourseCreation, project);
+    }
+
+    @Test
+    public void phase2() {
+        Project project = new Project();
+        project.setId("Gemainsam Forschen");
+        phases.endPhase(ProjectPhase.GroupFormation, project);
+    }
+
+    @Test
+    public void phase3() {
+        Project project = new Project();
+        project.setId("Gemainsam Forschen");
+        phases.endPhase(ProjectPhase.DossierFeedback, project);
+    }
+
+    @Test
+    public void phase4() {
+        Project project = new Project();
+        project.setId("Gemainsam Forschen");
+        phases.endPhase(ProjectPhase.Execution, project);
+    }
+
+    @Test
+    public void phase5() {
+        Project project = new Project();
+        project.setId("Gemainsam Forschen");
+        phases.endPhase(ProjectPhase.Assessment, project);
+    }
+}
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java
index 564d54cca5d699c5c93b3e56d64ee0e91bd8057a..9426d94804ed8b6f42600286e659fae1276d045a 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java
@@ -24,9 +24,9 @@ public class TestAddAssessment {
         workRating[2] = 4;      //Hilfsbereitschaft oder so
 
         StudentIdentifier student = new StudentIdentifier("Spaß", "Haralf");
-        Performance performance = new Performance(student, quizAnswers,"so ein toller Typ", workRating);
-        Assessment assessment = new Assessment(student, performance);
-        iPeerAssessment.addAssessmentDataToDB(assessment);
+        //Performance performance = new Performance(student, quizAnswers,"so ein toller Typ", workRating);
+        //Assessment assessment = new Assessment(student, performance);
+        //iPeerAssessment.addAssessmentDataToDB(assessment);
     }
 
 }
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1252c6ae0db6e157e1808d3a697f212fda240bfc
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/peerassessment/HashMapTest.java
@@ -0,0 +1,224 @@
+package unipotsdam.gf.modules.peerassessment;
+
+import org.junit.Test;
+import unipotsdam.gf.modules.assessment.controller.model.Performance;
+import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+
+import java.util.*;
+
+public class HashMapTest {
+
+    private Map<String, Double> meanOfWorkRatings(ArrayList<Map<String, Double>> workRatings) {
+        HashMap<String, Double> mean = new HashMap();
+        double size = (double) workRatings.size();
+        Iterator it = workRatings.get(0).entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry pair = (Map.Entry) it.next();
+            mean.put((String) pair.getKey(), 0.0);
+        }
+        for (int i = 0; i < workRatings.size(); i++) {
+            it = workRatings.get(i).entrySet().iterator();
+            while (it.hasNext()) {
+                Map.Entry pair = (Map.Entry) it.next();
+                mean.put((String) pair.getKey(), (Double) pair.getValue() / size + mean.get(pair.getKey()));
+            }
+        }
+        return mean;
+    }
+
+    Comparator<Map<String, Double>> byMean = (o1, o2) -> {
+        Double sumOfO1 = 0.;
+        Double sumOfO2 = 0.;
+        for (String key : o1.keySet()) {
+            sumOfO1 += o1.get(key);
+            sumOfO2 += o2.get(key);
+        }
+        if (sumOfO1.equals(sumOfO2)) {
+            return 0;
+        } else {
+            return sumOfO1 < sumOfO2 ? -1 : 1;
+        }
+    };
+
+    //fixme: use the function from the class .... obviously
+    public ArrayList<Map<String, Double>> cheatChecker(ArrayList<Map<String, Double>> workRatings, String method) {
+        ArrayList<Map<String, Double>> result = new ArrayList<>();
+        //todo: magicString sollte Enum sein um nutzbarer zu sein.
+        if (method.equals("median")) {
+            workRatings.sort(byMean);
+            result.add(workRatings.get(workRatings.size() / 2)); //in favor of student
+        }
+        if (method.equals("variance")) {
+            ArrayList<Map<String, Double>> oneExcludedMeans = new ArrayList<>();
+            if (workRatings.size() > 1) {
+                for (Map rating : workRatings) {
+                    ArrayList<Map<String, Double>> possiblyCheating = new ArrayList<>(workRatings);
+                    possiblyCheating.remove(rating);
+                    oneExcludedMeans.add(meanOfWorkRatings(possiblyCheating));
+                }
+            } else {
+                oneExcludedMeans.add(meanOfWorkRatings(workRatings));
+            }
+            Map<String, Double> meanWorkRating = new HashMap<>(meanOfWorkRatings(oneExcludedMeans));
+            ArrayList<Map<String, Double>> elementwiseDeviation = new ArrayList<>();
+            for (Map<String, Double> rating: oneExcludedMeans){
+                HashMap<String, Double> shuttle = new HashMap<>();
+                for (String key: rating.keySet()){
+                    Double value = (rating.get(key)-meanWorkRating.get(key))*(rating.get(key)-meanWorkRating.get(key));
+                    shuttle.put(key, value);
+                }
+                elementwiseDeviation.add(shuttle);
+            }
+            Double deviationOld=0.;
+            Integer key=0;
+            for (Integer i=0; i<elementwiseDeviation.size(); i++){
+                Double deviationNew=0.;
+                for (Double devi: elementwiseDeviation.get(i).values()){
+                    deviationNew += devi;
+                }
+                if (deviationNew>deviationOld){
+                    deviationOld=deviationNew;
+                    key = i;
+                }
+            }
+            result.add(oneExcludedMeans.get(key)); //gets set of rates with smallest deviation in data
+        }
+        return result;
+    }
+
+    @Test
+    public void sortTest() {
+        Map work = new HashMap<String, Double>();
+        work.put("responsibility", 1.);
+        work.put("partOfWork", 1.);
+        work.put("cooperation", 1.);
+        work.put("communication", 1.);
+        work.put("autonomous", 1.);
+        Map work2 = new HashMap<String, Double>();
+        work2.put("responsibility", 3.);
+        work2.put("partOfWork", 4.);
+        work2.put("cooperation", 5.);
+        work2.put("communication", 3.);
+        work2.put("autonomous", 4.);
+        Map work3 = new HashMap<String, Double>();
+        work3.put("responsibility", 2.);
+        work3.put("partOfWork", 3.);
+        work3.put("cooperation", 5.);
+        work3.put("communication", 2.);
+        work3.put("autonomous", 1.);
+        Map work4 = new HashMap<String, Double>();
+        work4.put("responsibility", 5.);
+        work4.put("partOfWork", 5.);
+        work4.put("cooperation", 4.);
+        work4.put("communication", 4.);
+        work4.put("autonomous", 5.);
+        ArrayList<Map<String, Double>> workRatings = new ArrayList<>();
+        workRatings.add(work);
+        workRatings.add(work2);
+        workRatings.add(work3);
+        workRatings.add(work4);
+
+        //fixme: workRating in class. cheatchecker extends Hashmap<String, Double>!?
+        System.out.println(cheatChecker(workRatings, "median").toString());
+        System.out.println(cheatChecker(workRatings, "variance").toString());
+    }
+
+    @Test
+    public void meanMap() {
+        Map work = new HashMap<String, Double>();
+        work.put("responsibility", 1.);
+        work.put("partOfWork", 1.);
+        work.put("cooperation", 1.);
+        work.put("communication", 1.);
+        work.put("autonomous", 1.);
+        Map work2 = new HashMap<String, Double>();
+        work2.put("responsibility", 3.);
+        work2.put("partOfWork", 4.);
+        work2.put("cooperation", 5.);
+        work2.put("communication", 3.);
+        work2.put("autonomous", 4.);
+        ArrayList<Map<String, Integer>> workRatings = new ArrayList<>();
+        workRatings.add(work);
+        workRatings.add(work2);
+        workRatings.add(work2);
+
+        Map mean = new HashMap();
+        double size = (double) workRatings.size();
+        Iterator it = workRatings.get(0).entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry pair = (Map.Entry) it.next();
+            mean.put(pair.getKey(), 0.0);
+        }
+        for (int i = 0; i < workRatings.size(); i++) {
+            it = workRatings.get(i).entrySet().iterator();
+            while (it.hasNext()) {
+                Map.Entry pair = (Map.Entry) it.next();
+                mean.put(pair.getKey(), (Double) mean.get(pair.getKey()) + (Double) pair.getValue() / size);
+            }
+        }
+        System.out.println(mean.toString());
+    }
+
+    @Test
+    public void printMap() {
+        Map workWork = new HashMap<String, Integer>();
+        workWork.put("horst", 2);
+        workWork.put("Stefan", 5);
+        Performance performance = new Performance();
+        performance.setWorkRating(workWork);
+        Iterator it = workWork.entrySet().iterator();
+        while (it.hasNext()) {
+            Map.Entry pair = (Map.Entry) it.next();
+            System.out.println(workWork.get(pair.getKey()));
+            System.out.println((double) 2 * (Integer) pair.getValue());
+            it.remove(); // avoids a ConcurrentModificationException
+        }
+    }
+
+    @Test
+    public void test1() {
+        ArrayList<Performance> result = new ArrayList<>();
+        StudentIdentifier student = new StudentIdentifier("projekt", "student");
+        List<Integer> quiz = new ArrayList<>();
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(1);
+        quiz.add(0);
+        quiz.add(1);
+        Map work = new HashMap<String, Double>();
+        work.put("responsibility", 1.);
+        work.put("partOfWork", 1.);
+        work.put("cooperation", 1.);
+        work.put("communication", 1.);
+        work.put("autonomous", 1.);
+        Map work2 = new HashMap<String, Double>();
+        work2.put("responsibility", 3.);
+        work2.put("partOfWork", 4.);
+        work2.put("cooperation", 5.);
+        work2.put("communication", 3.);
+        work2.put("autonomous", 4.);
+        Map contribution1 = new HashMap<String, Double>();
+        contribution1.put("Dossier", 4.);
+        contribution1.put("eJournal", 2.);
+        contribution1.put("research", 4.);
+        Map contribution2 = new HashMap<String, Double>();
+        contribution2.put("Dossier", 2.);
+        contribution2.put("eJournal", 3.);
+        contribution2.put("research", 4.);
+        Performance pf = new Performance();
+        pf.setContributionRating(contribution1);
+        pf.setQuizAnswer(quiz);
+        pf.setStudentIdentifier(student);
+        pf.setWorkRating(work);
+        Performance pf2 = new Performance();
+        pf2.setContributionRating(contribution2);
+        pf2.setQuizAnswer(quiz);
+        pf2.setStudentIdentifier(student);
+        pf2.setWorkRating(work2);
+        result.add(pf);
+        result.add(pf2);
+    }
+
+}
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/testsandbox/SpiedListHolder.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/testsandbox/SpiedListHolder.java
new file mode 100644
index 0000000000000000000000000000000000000000..de9f94dff4e159f7cfc9076f9ee89092356a65ca
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/testsandbox/SpiedListHolder.java
@@ -0,0 +1,20 @@
+package unipotsdam.gf.testsandbox;
+
+import unipotsdam.gf.core.testsandbox.TestListInterface;
+import unipotsdam.gf.interfaces.Feedback;
+
+import javax.inject.Inject;
+
+public class SpiedListHolder {
+    private TestListInterface spiedList;
+
+
+    @Inject
+    public SpiedListHolder(TestListInterface spiedList) {
+        this.spiedList = spiedList;
+    }
+
+    public TestListInterface getSpiedList() {
+        return spiedList;
+    }
+}
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/testsandbox/TestTestTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/testsandbox/TestTestTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..74a6a1f5839925856c853efda71829164cb164ba
--- /dev/null
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/testsandbox/TestTestTest.java
@@ -0,0 +1,118 @@
+package unipotsdam.gf.testsandbox;
+
+
+import org.glassfish.hk2.api.ServiceLocator;
+import org.glassfish.hk2.utilities.ServiceLocatorUtilities;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+import unipotsdam.gf.config.GFApplicationBinder;
+import unipotsdam.gf.core.testsandbox.TestListInterface;
+
+import javax.inject.Inject;
+import java.util.ArrayList;
+
+import static junit.framework.Assert.assertEquals;
+
+@RunWith(MockitoJUnitRunner.class)
+public class TestTestTest {
+
+
+    @Spy
+    java.util.List<String> spiedList = new ArrayList<String>();
+
+
+    @Inject
+    TestListInterface spiedList2;
+
+    @Inject
+    @Spy
+    TestListInterface spiedList3;
+
+
+    @Inject
+    SpiedListHolder spiedListHolder;
+
+
+    @Before
+    public void setUp() {
+        final ServiceLocator locator = ServiceLocatorUtilities.bind(new GFApplicationBinder());
+        locator.inject(this);
+    }
+
+
+    // GEHT
+    @Test
+    public void howSpiesWork() {
+        java.util.List<String> spiedList = Mockito.spy(new ArrayList<String>());
+        Mockito.spy(spiedList);
+
+        spiedList.add("one");
+        spiedList.add("two");
+
+        Mockito.verify(spiedList).add("one");
+        Mockito.verify(spiedList).add("two");
+
+        assertEquals(2, spiedList.size());
+    }
+
+
+    // GEHT
+    @Test
+    public void howSpiesWorkWithAnnotation() {
+
+        spiedList.add("one");
+        spiedList.add("two");
+
+        Mockito.verify(spiedList).add("one");
+        Mockito.verify(spiedList).add("two");
+
+        assertEquals(2, spiedList.size());
+    }
+
+    // GEHT
+    @Test
+    public void howSpiesWorkWithInjection() {
+
+        java.util.List<String> spiedList = Mockito.spy(spiedList2);
+
+        spiedList.add("one");
+        spiedList.add("two");
+
+        Mockito.verify(spiedList).add("one");
+        Mockito.verify(spiedList).add("two");
+
+        assertEquals(2, spiedList.size());
+    }
+
+    // GEHT NICHT!
+    @Test
+    public void howSpiesWorkWithInjectionAndAnnotation() {
+
+        spiedList3.add("one");
+        spiedList3.add("two");
+
+        Mockito.verify(spiedList3).add("one");
+        Mockito.verify(spiedList3).add("two");
+
+        assertEquals(2, spiedList3.size());
+    }
+
+ /*   //
+    @Test
+    public void howSpiesWorkWithConstructorInjection() {
+
+        java.util.List<String> spiedList4 = Mockito.spy(spiedListHolder.getSpiedList());
+
+        spiedList4.add("one");
+        spiedList4.add("two");
+
+        Mockito.verify(spiedList4).add("one");
+        Mockito.verify(spiedList4).add("two");
+
+        assertEquals(2, spiedList4.size());
+    }*/
+}