diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java
index f842d48f0bab046de40f116fc91c78d4c34b1ca1..975f180b4ebb69fd4072162718f5a293f9b9c252 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ISubmission.java
@@ -1,5 +1,6 @@
 package unipotsdam.gf.interfaces;
 
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
 import unipotsdam.gf.modules.submission.model.FullSubmission;
 import unipotsdam.gf.modules.submission.model.FullSubmissionPostRequest;
 import unipotsdam.gf.modules.submission.model.SubmissionPart;
@@ -48,10 +49,11 @@ public interface ISubmission {
     /**
      * Get the entire submission part from database
      *
-     * @param submissionPartId The id of the submission part
-     * @return The new submission part
+     * @param fullSubmissionId The id of the full submission
+     * @param category The category of the submission
+     * @return The returned submission part
      */
-    SubmissionPart getSubmissionPart(String submissionPartId);
+    SubmissionPart getSubmissionPart(String fullSubmissionId, Category category);
 
     /**
      * Get all submission parts based on an id
@@ -62,11 +64,12 @@ public interface ISubmission {
     ArrayList<SubmissionPart> getAllSubmissionParts(String fullSubmissionId);
 
     /**
-     * Checks if a submission part id already exists in the database
+     * Checks if a submission part already exists in the database
      *
-     * @param submissionPartId The id of the submission part
-     * @return Returns true if the id exists
+     * @param fullSubmissionId The id of the full submission
+     * @param category The category of the submission
+     * @return Returns true if the submission part exists
      */
-    boolean existsSubmissionPartId(String submissionPartId);
+    boolean existsSubmissionPart(String fullSubmissionId, Category category);
 
 }
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java
index 2bfb87ad675edc236b3793162c5ef447c3c87b98..305311e2f4571278dd20bec905d2fb083b56a2dc 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java
@@ -108,28 +108,22 @@ public class SubmissionController implements ISubmission {
     @Override
     public SubmissionPart addSubmissionPart(SubmissionPartPostRequest submissionPartPostRequest) {
 
-        // create a new id if we found no id.
-        String uuid = UUID.randomUUID().toString();
-        while (existsSubmissionPartId(uuid)) {
-            uuid = UUID.randomUUID().toString();
-        }
-
         // establish connection
         MysqlConnect connection = new MysqlConnect();
         connection.connect();
 
         // build and execute request
-        String request = "INSERT INTO submissionparts (`id`, `userId`, `fullSubmissionId`, `category`) VALUES (?,?,?,?);";
-        connection.issueInsertOrDeleteStatement(request, uuid, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString());
+        String request = "INSERT IGNORE INTO submissionparts (`userId`, `fullSubmissionId`, `category`) VALUES (?,?,?);";
+        connection.issueInsertOrDeleteStatement(request, submissionPartPostRequest.getUserId(), submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString().toUpperCase());
 
         // build and execute body requests
-        String requestElement = "INSERT INTO submissionpartbodyelements (`submissionPartId`, `text`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?)";
+        String requestElement = "INSERT IGNORE INTO submissionpartbodyelements (`fullSubmissionId`, `category`, `text`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?,?)";
         for (SubmissionPartBodyElement element : submissionPartPostRequest.getBody()) {
-            connection.issueInsertOrDeleteStatement(requestElement, uuid, element.getText(), element.getStartCharacter(), element.getEndCharacter());
+            connection.issueInsertOrDeleteStatement(requestElement, submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory().toString().toUpperCase(), element.getText(), element.getStartCharacter(), element.getEndCharacter());
         }
 
         // get the new submission from database
-        SubmissionPart submissionPart = getSubmissionPart(uuid);
+        SubmissionPart submissionPart = getSubmissionPart(submissionPartPostRequest.getFullSubmissionId(), submissionPartPostRequest.getCategory());
 
         // close connection
         connection.close();
@@ -139,15 +133,20 @@ public class SubmissionController implements ISubmission {
     }
 
     @Override
-    public SubmissionPart getSubmissionPart(String submissionPartId) {
+    public SubmissionPart getSubmissionPart(String fullSubmissionId, Category category) {
 
         // establish connection
         MysqlConnect connection = new MysqlConnect();
         connection.connect();
 
         // build and execute request
-        String request = "SELECT * FROM submissionparts LEFT JOIN submissionpartbodyelements ON id = submissionPartId WHERE id = ?;";
-        VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId);
+        String request = "SELECT * FROM submissionparts s " +
+                "LEFT JOIN submissionpartbodyelements b " +
+                "ON s.fullSubmissionId = b.fullSubmissionId " +
+                "AND s.category = b.category " +
+                "WHERE s.fullSubmissionId = ? " +
+                "AND s.category = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId, category);
 
         if (rs.next()) {
             // save submission
@@ -176,11 +175,12 @@ public class SubmissionController implements ISubmission {
 
         // build and execute request
         String request = "SELECT * " +
-                "FROM submissionparts " +
-                "LEFT JOIN submissionpartbodyelements " +
-                "ON id = submissionPartId " +
-                "WHERE fullSubmissionId = ? " +
-                "ORDER BY id;";
+                "FROM submissionparts sp " +
+                "LEFT JOIN submissionpartbodyelements  spbe " +
+                "ON sp.fullSubmissionId = spbe.fullSubmissionId " +
+                "AND sp.category = spbe.category " +
+                "WHERE sp.fullSubmissionId = ? " +
+                "ORDER BY sp.timestamp;";
         VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId);
 
         ArrayList<SubmissionPart> submissionParts = new ArrayList<>();
@@ -198,15 +198,15 @@ public class SubmissionController implements ISubmission {
     }
 
     @Override
-    public boolean existsSubmissionPartId(String submissionPartId) {
+    public boolean existsSubmissionPart(String fullSubmissionId, Category category) {
 
         // establish connection
         MysqlConnect connection = new MysqlConnect();
         connection.connect();
 
         // build and execute request
-        String request = "SELECT COUNT(*) > 0 AS `exists` FROM submissionparts WHERE id = ?;";
-        VereinfachtesResultSet rs = connection.issueSelectStatement(request, submissionPartId);
+        String request = "SELECT COUNT(*) > 0 AS `exists` FROM submissionparts WHERE fullSubmissionId = ? AND category = ?;";
+        VereinfachtesResultSet rs = connection.issueSelectStatement(request, fullSubmissionId, category);
 
         if (rs.next()) {
             // save the response
@@ -238,7 +238,7 @@ public class SubmissionController implements ISubmission {
     private FullSubmission getFullSubmissionFromResultSet(VereinfachtesResultSet rs) {
 
         String id = rs.getString("id");
-        long timestamp = rs.getTimestamp(2).getTime();
+        long timestamp = rs.getTimestamp("timestamp").getTime();
         String user = rs.getString("user");
         String text = rs.getString("text");
 
@@ -254,7 +254,6 @@ public class SubmissionController implements ISubmission {
      */
     private SubmissionPart getSubmissionPartFromResultSet(VereinfachtesResultSet rs) {
 
-        String id = rs.getString("id");
         long timestamp = rs.getTimestamp("timestamp").getTime();
         String userId = rs.getString("userId");
         String fullSubmissionId = rs.getString("fullSubmissionId");
@@ -265,7 +264,7 @@ public class SubmissionController implements ISubmission {
 
         do {
             // only add it if the element is not empty
-            if (!Strings.isNullOrEmpty(rs.getString("submissionPartId"))) {
+            if (!Strings.isNullOrEmpty(rs.getString("text"))) {
                 SubmissionPartBodyElement element = new SubmissionPartBodyElement(
                         rs.getString("text"),
                         rs.getInt("startCharacter"),
@@ -275,9 +274,15 @@ public class SubmissionController implements ISubmission {
             }
         } while (rs.next());
 
-        return new SubmissionPart(id, timestamp, userId, fullSubmissionId, category, body);
+        return new SubmissionPart(timestamp, userId, fullSubmissionId, category, body);
     }
 
+    /**
+     * Build an array of submission part objects from a given result set
+     *
+     * @param rs The result set from the database query, holding different submission parts
+     * @return An array of submission parts
+     */
     private ArrayList<SubmissionPart> getAllSubmissionPartsFromResultSet(VereinfachtesResultSet rs) {
 
         ArrayList<SubmissionPart> submissionParts = new ArrayList<>();
@@ -300,7 +305,6 @@ public class SubmissionController implements ISubmission {
 
                 // build submission part with empty body
                 tmpPart = new SubmissionPart(
-                    rs.getString("id"),
                     rs.getTimestamp("timestamp").getTime(),
                     rs.getString("userId"),
                     rs.getString("fullSubmissionId"),
@@ -322,7 +326,6 @@ public class SubmissionController implements ISubmission {
         // add last part
         submissionParts.add(tmpPart);
 
-        System.out.println(submissionParts.toString());
         return submissionParts;
     }
 
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java
index de03fa1aae7c3848da77f13bebbe6dae028efb32..1a0b7644d1f69f2c5490f1bc7ac9ab6111eb6daa 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/SubmissionPart.java
@@ -11,7 +11,6 @@ import java.util.ArrayList;
 public class SubmissionPart {
 
     // variables
-    private String id;
     private long timestamp;
     private String userId;
     private String fullSubmissionId;
@@ -19,8 +18,7 @@ public class SubmissionPart {
     private ArrayList<SubmissionPartBodyElement> body;
 
     // constructor
-    public SubmissionPart(String id, long timestamp, String userId, String fullSubmissionId, Category category, ArrayList<SubmissionPartBodyElement> body) {
-        this.id = id;
+    public SubmissionPart(long timestamp, String userId, String fullSubmissionId, Category category, ArrayList<SubmissionPartBodyElement> body) {
         this.timestamp = timestamp;
         this.userId = userId;
         this.fullSubmissionId = fullSubmissionId;
@@ -31,14 +29,6 @@ public class SubmissionPart {
     public SubmissionPart(){}
 
     // methods
-    public String getId() {
-        return id;
-    }
-
-    public void setId(String id) {
-        this.id = id;
-    }
-
     public long getTimestamp() {
         return timestamp;
     }
@@ -82,8 +72,7 @@ public class SubmissionPart {
     @Override
     public String toString() {
         return "SubmissionPart{" +
-                "id='" + id + '\'' +
-                ", timestamp=" + timestamp +
+                "timestamp=" + timestamp +
                 ", userId='" + userId + '\'' +
                 ", fullSubmissionId='" + fullSubmissionId + '\'' +
                 ", category=" + category +
diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java
index 2b3319e7c05b522eb2f7fd1f191a630d5655667b..07aacbd4009828c1019702cccc996e229bb9a3b2 100644
--- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java
+++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java
@@ -1,5 +1,6 @@
 package unipotsdam.gf.modules.submission.view;
 
+import unipotsdam.gf.modules.peer2peerfeedback.Category;
 import unipotsdam.gf.modules.submission.controller.SubmissionController;
 import unipotsdam.gf.modules.submission.model.*;
 
@@ -60,11 +61,11 @@ public class SubmissionService {
     }
 
     @GET
-    @Path("/part/{id}")
-    public Response getSubmissionPart(@PathParam("id") String submissionPartId) {
+    @Path("/full/{id}/category/{category}")
+    public Response getSubmissionPart(@PathParam("id") String fullSubmissionId, @PathParam("category") String category) {
         // get submission part from database based by id
         SubmissionController controller = new SubmissionController();
-        SubmissionPart submissionPart = controller.getSubmissionPart(submissionPartId);
+        SubmissionPart submissionPart = controller.getSubmissionPart(fullSubmissionId, Category.valueOf(category.toUpperCase()));
 
         if (submissionPart != null) {
             return  Response.ok(submissionPart).build();
@@ -72,7 +73,7 @@ public class SubmissionService {
         else {
             // declare response
             SubmissionResponse response = new SubmissionResponse();
-            response.setMessage("Submission part with the id '" + submissionPartId + "' can't be found");
+            response.setMessage("Submission part with the full submission id '" + fullSubmissionId + "' and the category '" + category.toUpperCase() + "' can't be found");
 
             return Response.status(Response.Status.NOT_FOUND).entity(response).build();
         }
diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
index eaca2fefffcb45baa1f5dc63a994ef96508520b4..1a069f1b37b580532de97074911d5d1f2a98184d 100644
--- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
+++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql
@@ -130,20 +130,20 @@ CREATE TABLE if not exists `fullsubmissions` (
 ) ENGINE = InnoDB DEFAULT CHARSET=utf8;
 
 CREATE TABLE if not exists `submissionparts` (
-  `id` VARCHAR(120) NOT NULL,
   `timestamp` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `userId` VARCHAR(120) NOT NULL,
   `fullSubmissionId` VARCHAR(120) NOT NULL,
   `category` VARCHAR(30) NOT NULL,
-  PRIMARY KEY (`id`)
+  PRIMARY KEY (`fullSubmissionId`, `category`)
 ) ENGINE = InnoDB DEFAULT CHARSET=utf8;
 
 CREATE TABLE if not exists `submissionpartbodyelements` (
-  `submissionPartId` VARCHAR(120) NOT NULL,
+  `fullSubmissionId` VARCHAR(120) NOT NULL,
+  `category` VARCHAR(30) NOT NULL,
   `text` MEDIUMTEXT NOT NULL,
   `startCharacter` int(11) NOT NULL,
   `endCharacter` int(11) NOT NULL,
-  PRIMARY KEY (`submissionPartId`, `startCharacter`, `endCharacter`)
+  PRIMARY KEY (`fullSubmissionId`, `category`, `startCharacter`, `endCharacter`)
 ) ENGINE = InnoDB DEFAULT CHARSET=utf8;
 
 alter table users