diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
index 6ffde6e89fef8ca74e399b2a63461e2feb9e6c0c..e81dba7f42a13d78c672f2bf4fc73faa327ec64c 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java
@@ -7,16 +7,11 @@ 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.PeerAssessment;
 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.journal.DummyJournalImpl;
-import unipotsdam.gf.modules.journal.model.Journal;
-import unipotsdam.gf.modules.journal.service.DummyJournalService;
 import unipotsdam.gf.modules.peer2peerfeedback.DummyFeedback;
 import unipotsdam.gf.modules.researchreport.DummyResearchReportManagement;
-import unipotsdam.gf.modules.researchreport.ResearchReport;
 import unipotsdam.gf.modules.researchreport.ResearchReportManagement;
 
 public class GFApplicationBinder extends AbstractBinder {
@@ -29,7 +24,6 @@ public class GFApplicationBinder extends AbstractBinder {
         bind(CommunicationDummyService.class).to(ICommunication.class);
         bind(ManagementImpl.class).to(Management.class);
         bind(DummyFeedback.class).to(Feedback.class);
-        bind(DummyJournalImpl.class).to(IJournal.class);
         bind(PeerAssessmentDummy.class).to(IPeerAssessment.class);
         bind(PhasesImpl.class).to(IPhases.class);
         bind(ManagementImpl.class).to(Management.class);
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 16d31e35a5dce1f97d2d4d63c9f027b7a9f27076..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,6 +2,9 @@ package unipotsdam.gf.modules.journal.model;
 
 
 import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier;
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
+
+import java.util.Date;
 
 import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml;
 
@@ -10,39 +13,57 @@ import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml;
  */
 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 51f14b21ca29e9e0afb414aaf8fd9250de22b3c9..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,6 +1,7 @@
 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;
@@ -13,50 +14,58 @@ import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml;
 
 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/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/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/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/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/utility.js b/gemeinsamforschen/src/main/webapp/assets/js/utility.js
index 33be09a5afb07442f689e89f4ef61a8c09ebc698..c5b8b37d083e2cc80f2260ded050c6c710143ade 100644
--- a/gemeinsamforschen/src/main/webapp/assets/js/utility.js
+++ b/gemeinsamforschen/src/main/webapp/assets/js/utility.js
@@ -13,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/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/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/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;