diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java
index 7102865728656f647438245ae9f5dbb70dd68dcf..ec10d90e4ac6f458e853ecf81507cb3f63d271c5 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/group/GroupView.java
@@ -2,7 +2,6 @@ package unipotsdam.gf.modules.group;
 
 import unipotsdam.gf.modules.project.Management;
 import unipotsdam.gf.modules.project.Project;
-import unipotsdam.gf.modules.project.ProjectConfiguration;
 import unipotsdam.gf.modules.project.ProjectDAO;
 import unipotsdam.gf.interfaces.IGroupFinding;
 import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
@@ -15,7 +14,6 @@ import java.io.IOException;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 
 @Path("/group")
 public class GroupView {
@@ -96,7 +94,7 @@ public class GroupView {
     @Path("/projects/{projectName}")
     public void saveGroups(@PathParam("projectName") String projectName, Group[] groups) {
         Project project = new Project(projectName);
-        groupFormationProcess.finalizeGroups(project, groups);
+        groupfinding.persistGroups(Arrays.asList(groups), project);
     }
 
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java
index 7bb9373b37ab0cf96514f5dcfd060f3df7e422b9..b4379f195d1ee13ddc37552f659c2ee1586f262d 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/DossierCreationProcess.java
@@ -39,7 +39,7 @@ public class DossierCreationProcess {
      *
      * @param project
      */
-    public void startDossierPhase(Project project) {
+    public void start(Project project) {
         Task task = new Task(TaskName.CLOSE_GROUP_FINDING_PHASE, project.getAuthorEmail(), project.getName(),
                 Progress.FINISHED);
         taskDAO.updateForUser(task);
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java
index 59b7da4c2b314db163792a14c3d41e6221c5d743..b2cbfb34fc03a378c231746fdd9726c05c9899c8 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/GroupFormationProcess.java
@@ -57,11 +57,19 @@ public class GroupFormationProcess {
      * @param project
      * @param groups
      */
-    public void finalizeGroups( Project project, Group ... groups) {
-        groupfinding.persistGroups(Arrays.asList(groups), project);
+    public void finish(Project project, Group ... groups) {
         taskDAO.persistTeacherTask(project, TaskName.CLOSE_GROUP_FINDING_PHASE, Phase.GroupFormation);
+        /**
+         * Gruppenphase wird beendet
+         */
         Task task = new Task(TaskName.CLOSE_GROUP_FINDING_PHASE, project.getAuthorEmail(), project.getName(), Progress.FINISHED);
         taskDAO.updateForUser(task);
+        // Der Dozent muss nicht mehr auf weitere Studierende warten
+        Task task2 = new Task(TaskName.WAIT_FOR_PARTICPANTS, project.getAuthorEmail(), project.getName(), Progress
+                .FINISHED);
+        taskDAO.updateForUser(task2);
+        // Die Studierenden müssen nicht mehr auf die Gruppenfindung warten
+        taskDAO.finishMemberTask(project, TaskName.WAITING_FOR_GROUP);
         taskDAO.persistMemberTask(project,  TaskName.CONTACT_GROUP_MEMBERS, Phase.GroupFormation);
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java
index 891d6f8560f54b83e76898a347e19f9ea61eaa5c..dc113e5ed0cecbc7d804da73510c714def073c1e 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/phases/PhasesImpl.java
@@ -1,7 +1,6 @@
 package unipotsdam.gf.process.phases;
 
 import unipotsdam.gf.modules.project.Project;
-import unipotsdam.gf.interfaces.Feedback;
 import unipotsdam.gf.interfaces.ICommunication;
 import unipotsdam.gf.interfaces.IJournal;
 import unipotsdam.gf.interfaces.IPeerAssessment;
@@ -11,7 +10,6 @@ import unipotsdam.gf.modules.communication.Messages;
 import unipotsdam.gf.mysql.MysqlConnect;
 import unipotsdam.gf.process.DossierCreationProcess;
 import unipotsdam.gf.process.GroupFormationProcess;
-import unipotsdam.gf.process.constraints.ConstraintsImpl;
 import unipotsdam.gf.process.constraints.ConstraintsMessages;
 
 import javax.annotation.ManagedBean;
@@ -44,6 +42,9 @@ public class PhasesImpl implements IPhases {
     @Inject
     private DossierCreationProcess dossierCreationProcess;
 
+    @Inject
+    private GroupFormationProcess groupFormationProcess;
+
 
 
 
@@ -83,7 +84,8 @@ public class PhasesImpl implements IPhases {
                 // inform users about the formed groups, optionally giving them a hint on what happens next
                 iCommunication.sendMessageToUsers(project, Messages.GroupFormation(project));
                 saveState(project, changeToPhase);
-                dossierCreationProcess.startDossierPhase(project);
+                groupFormationProcess.finish(project);
+                dossierCreationProcess.start(project);
                 break;
             case DossierFeedback:
                 // check if everybody has uploaded a dossier
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java
index eba823b58994a5c36fd94e7d2c65b9620a287cb1..f2a2232824f9c0620d136794e11fee138dc2e6b3 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java
@@ -45,12 +45,14 @@ public class TaskDAO {
         task.setProjectName(vereinfachtesResultSet.getString("projectName"));
         task.setGroupTask(vereinfachtesResultSet.getBoolean("groupTask"));
         task.setProgress(Progress.valueOf(vereinfachtesResultSet.getString("progress")));
-        try{
+        try {
             task.setEventCreated(vereinfachtesResultSet.getTimestamp("created").getTime());
-        }catch(Exception e){ }
-        try{
+        } catch (Exception e) {
+        }
+        try {
             task.setDeadline(vereinfachtesResultSet.getTimestamp("due").getTime());
-        }catch(Exception e){ }
+        } catch (Exception e) {
+        }
         task.setPhase(Phase.valueOf(vereinfachtesResultSet.getString("phase")));
         task.setTaskName(TaskName.valueOf(vereinfachtesResultSet.getString("taskName")));
         task.setHasRenderModel(false);
@@ -107,7 +109,7 @@ public class TaskDAO {
         return task;
     }
 
-    private void persist(Task task)  {
+    private void persist(Task task) {
 
         if (task.getTaskName() == null) {
             throw new Error("no taskName given");
@@ -126,10 +128,7 @@ public class TaskDAO {
 
         connect.connect();
         String query =
-                "INSERT IGNORE INTO fltrail.tasks (userEmail, projectName, taskName, " +
-                        "groupTask, importance, progress, phase, created, due, " +
-                        "taskMode, taskMode2, taskMode3)" +
-                        "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?,  ?, ?, ?)";
+                "INSERT IGNORE INTO fltrail.tasks (userEmail, projectName, taskName, " + "groupTask, importance, progress, phase, created, due, " + "taskMode, taskMode2, taskMode3)" + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?,  ?, ?, ?)";
 
         if (task.getTaskType() == null || task.getTaskType().length == 0) {
             try {
@@ -150,7 +149,8 @@ public class TaskDAO {
         connect.connect();
         String query = "Select * from tasks where userEmail = ? AND projectName = ?";
         ArrayList<Task> result = new ArrayList<>();
-        VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, user.getEmail(),project.getName());
+        VereinfachtesResultSet vereinfachtesResultSet =
+                connect.issueSelectStatement(query, user.getEmail(), project.getName());
         while (vereinfachtesResultSet.next()) {
             String taskName = vereinfachtesResultSet.getString("taskName");
 
@@ -199,7 +199,8 @@ public class TaskDAO {
 
     private Task getFinalizeDossierTask(VereinfachtesResultSet vereinfachtesResultSet) {
         Task task = getGeneralTask(vereinfachtesResultSet);
-        task.setTaskData(submissionController.getSubmissionData(new User(task.getUserEmail()), new Project(task.getProjectName())));
+        task.setTaskData(submissionController
+                .getSubmissionData(new User(task.getUserEmail()), new Project(task.getProjectName())));
         return task;
     }
 
@@ -208,6 +209,12 @@ public class TaskDAO {
         persist(aDefault);
     }
 
+    public void persist(Project project, User target, TaskName taskName, Phase phase, Progress progress) {
+        Task aDefault = createDefault(project, target, taskName, phase);
+        aDefault.setProgress(progress);
+        persist(aDefault);
+    }
+
     public void persistTeacherTask(Project project, TaskName taskName, Phase phase) {
         User user = new User(projectDAO.getProjectByName(project.getName()).getAuthorEmail());
         Task aDefault = createDefault(project, user, taskName, phase);
@@ -236,8 +243,7 @@ public class TaskDAO {
 
     public void updateForUser(Task task) {
         connect.connect();
-        String query =
-                "UPDATE tasks set progress = ? where userEmail = ? AND projectName = ? AND taskName = ?";
+        String query = "UPDATE tasks set progress = ? where userEmail = ? AND projectName = ? AND taskName = ?";
         connect.issueUpdateStatement(
                 query, task.getProgress().name(), task.getUserEmail(), task.getProjectName(), task.getTaskName());
         connect.close();
@@ -245,10 +251,8 @@ public class TaskDAO {
 
     public void updateForAll(Task task) {
         connect.connect();
-        String query =
-                "UPDATE tasks set progress = ? where projectName = ? AND taskName = ?";
-        connect.issueUpdateStatement(
-                query, task.getProgress().name(), task.getProjectName(), task.getTaskName());
+        String query = "UPDATE tasks set progress = ? where projectName = ? AND taskName = ?";
+        connect.issueUpdateStatement(query, task.getProgress().name(), task.getProjectName(), task.getTaskName());
         connect.close();
     }
 
@@ -270,4 +274,14 @@ public class TaskDAO {
         persist(project, feedbackTaskData.getTarget(), TaskName.GIVE_FEEDBACK, Phase.DossierFeedback, TaskType.LINKED);
     }
 
+    /*
+     * if this takes long rewrite it as batch update
+     */
+    public void finishMemberTask(Project project, TaskName taskName) {
+        java.util.List<User> members = userDAO.getUsersByProjectName(project.getName());
+        for (User member : members) {
+            Task task = new Task(taskName, member.getEmail(), project.getName(), Progress.FINISHED);
+            updateForUser(task);
+        }
+    }
 }
diff --git a/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js b/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js
index eb9b594b6702f5bbcfc37a93f5ea238ef5112709..cfd6e397c1d9331b66b65d90b450479a3ebbd747 100644
--- a/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js
+++ b/gemeinsamforschen/src/main/webapp/annotation/js/annotationScript.js
@@ -12,6 +12,10 @@ $(document).ready(function() {
     var fullSubmissionId = getQueryVariable("fullSubmissionId");
     var category = getQueryVariable("category");
 
+    if(category == "TITEL" || category == "titel" ) {
+        $('#btnBack').hide();
+    }
+
     // fetch full submission from database
     getFullSubmission(getQueryVariable("fullSubmissionId"), function (response) {
 
@@ -70,29 +74,63 @@ $(document).ready(function() {
     $('#btnContinue').click(function () {
 
         var submissionId = getQueryVariable("fullSubmissionId");
+        var category = getQueryVariable("category");
+        var nextCategory = calculateNextCategory(category);
 
-        switch (getQueryVariable("category")) {
-            case "RECHERCE" : {
-                var nextCategory = "LITERATURVERZEICHNIS";
-                location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + "&category="+nextCategory;
-            }
-            case "LITERATURVERZEICHNIS" : {
-                location.href = "../project/give-feedback.jsp?projectName=" + getProjectName();
-
-                //location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId +
-                // "&category="+nextCategory;
-            }
+        if (!nextCategory) {
+            // TODO go to feedback page
+            location.href = "../project/give-feedback.jsp?projectName=" + getProjectName();
+        }
+         else {
+            location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + "&category="+nextCategory;
         }
-
     });
 
     /**
      * back button
      */
     $('#btnBack').click(function () {
-        location.href = "../../project/projects-student.jsp" ;
+
+        var submissionId = getQueryVariable("fullSubmissionId");
+        var category = getQueryVariable("category");
+        var nextCategory = calculateLastCategory(category);
+
+        if (!nextCategory) {
+
+        }
+        else {
+            location.href = "../annotation/annotation-document.jsp?fullSubmissionId="+submissionId + "&category="+nextCategory;
+        }
+
     });
 
+    function calculateNextCategory(current) {
+        var categories = ["TITEL", "RECHERCHE", "LITERATURVERZEICHNIS", "FORSCHUNGSFRAGE", "UNTERSUCHUNGSKONZEPT", "METHODIK", "DURCHFUEHRUNG", "AUSWERTUNG"];
+        var result = false;
+        for (var i = 0; i< categories.length -1; i++) {
+            if (categories[i] == current) {
+                result = categories[i + 1];
+            }
+        }
+        return result
+
+    }
+
+    function calculateLastCategory(current) {
+        var categories = ["TITEL", "RECHERCHE", "LITERATURVERZEICHNIS", "FORSCHUNGSFRAGE", "UNTERSUCHUNGSKONZEPT", "METHODIK", "DURCHFUEHRUNG", "AUSWERTUNG"];
+        var result = false;
+        for (var i = 1; i< categories.length; i++) {
+            if (categories[i] == current) {
+                result = categories[i - 1];
+            }
+        }
+        return result
+
+    }
+
+
+
+
     /**
      * validation of annotation create form inside the modal
      */
diff --git a/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js b/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js
index 6d7d807e3f44cc504f211a55dd625debca695365..f407ad85bf27f28c6b2a5e510e6a3a05d8c5665f 100644
--- a/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js
+++ b/gemeinsamforschen/src/main/webapp/annotation/js/annotationWebsocket.js
@@ -4,7 +4,7 @@ function connect(targetId, targetCategory) {
     var host = document.location.host;
     var pathname = document.location.pathname;
 
-    ws = new WebSocket("ws://" + host + "/ws/annotation/" + targetId + "/" + targetCategory);
+    ws = new WebSocket("ws://" + host +  "/gemeinsamforschen/ws/annotation/" + targetId + "/" + targetCategory);
 
     ws.onmessage = function (e) {
         var message = JSON.parse(e.data);
diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java
index ccf4eb7c62292e48f78f4dc3d3be51787129d2c7..27ee1232b5686784b645b6d07d0017d4058c59ba 100644
--- a/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java
+++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/process/tasks/GroupPhaseTaskTest.java
@@ -93,7 +93,7 @@ public class GroupPhaseTaskTest {
         for (User student : students) {
             group.addMember(student);
         }
-        groupFormationProcess.finalizeGroups(project, group);
+        groupFormationProcess.finish(project, group);
 
 
     }
diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql
index 6338b54ca8a5dfa7a32417d36dfc75fbfc2625da..bcea9a8e383d42cf9eddce8f1aa7ce9348090ad3 100644
--- a/gemeinsamforschen/src/test/resources/database/fltrail.sql
+++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql
@@ -177,9 +177,6 @@ ALTER TABLE `fullsubmissions`
 ALTER TABLE `groups`
   ADD PRIMARY KEY (`id`);
 
-ALTER TABLE `tasks`
-  ADD PRIMARY KEY (`id`);
-
 ALTER TABLE `groupuser`
   ADD KEY `userEmail` (`userEmail`),
   ADD KEY `groupId` (`groupId`);
diff --git a/gemeinsamforschen/src/test/resources/database/testproject.sql b/gemeinsamforschen/src/test/resources/database/testproject.sql
new file mode 100644
index 0000000000000000000000000000000000000000..c15d7e9c205f8a458ebf0134a305c3dceec22242
--- /dev/null
+++ b/gemeinsamforschen/src/test/resources/database/testproject.sql
@@ -0,0 +1,11 @@
+INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test1", "", 1,
+current_timestamp, "vodka@yolo.com", "", "GroupFormation" );
+
+INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test2", "", 1,
+current_timestamp, "vodka@yolo.com", "", "GroupFormation" );
+
+insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkas@yolo.com");
+insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkass@yolo.com");
+
+insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkas@yolo.com");
+insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkass@yolo.com");
\ No newline at end of file
diff --git a/gemeinsamforschen/src/test/resources/database/testuser.sql b/gemeinsamforschen/src/test/resources/database/testuser.sql
index 528cc3aeed6535b46051e805e579b55cdc0e28e1..fdbb25267ec35fa80e9c7f600c2017f46b0ee316 100644
--- a/gemeinsamforschen/src/test/resources/database/testuser.sql
+++ b/gemeinsamforschen/src/test/resources/database/testuser.sql
@@ -8,14 +8,3 @@ INSERT IGNORE INTO users (name, password, email, rocketChatId, rocketChatAuthTok
 "egal", "vodka@yolo.com", "egal", "egal", 0);
 
 
-INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test1", "", 1,
-current_timestamp, "vodka@yolo.com", "", "GroupFormation" );
-
-INSERT IGNORE INTO projects (name, password, active, timecreated, author, adminPassword, phase) VALUES ("test2", "", 1,
-current_timestamp, "vodka@yolo.com", "", "GroupFormation" );
-
-insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkas@yolo.com");
-insert IGNORE into projectuser (projectName, userEmail) VALUES ("test1", "vodkass@yolo.com");
-
-insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkas@yolo.com");
-insert IGNORE into projectuser (projectName, userEmail) VALUES ("test2", "vodkass@yolo.com");
\ No newline at end of file