diff --git a/core/migrations/0007_auto_20170522_1827.py b/core/migrations/0007_auto_20170522_1827.py
new file mode 100644
index 0000000000000000000000000000000000000000..f69800a37fe4bdb41c7f1d037dc4d2eb2e077b7a
--- /dev/null
+++ b/core/migrations/0007_auto_20170522_1827.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2017-05-22 18:27
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0006_auto_20170413_1102'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='student',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='core.Student'),
+        ),
+        migrations.AlterUniqueTogether(
+            name='submission',
+            unique_together=set([('type', 'student')]),
+        ),
+    ]
diff --git a/core/migrations/0008_auto_20170522_1834.py b/core/migrations/0008_auto_20170522_1834.py
new file mode 100644
index 0000000000000000000000000000000000000000..7eb42fad8d01012fdfeba12b7f068dde59af52fe
--- /dev/null
+++ b/core/migrations/0008_auto_20170522_1834.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.7 on 2017-05-22 18:34
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0007_auto_20170522_1827'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='submission',
+            old_name='seen',
+            new_name='seen_by_student',
+        ),
+        migrations.RemoveField(
+            model_name='submissiontype',
+            name='correction_guideline',
+        ),
+    ]
diff --git a/core/models.py b/core/models.py
index c791475106ae8c0c57a390024ce1c09aaa5a90de..8f217892b9bbe75103c1004368eae692fb995916 100644
--- a/core/models.py
+++ b/core/models.py
@@ -62,12 +62,12 @@ def random_matrikel_no():
 
 class SubmissionType(models.Model):
     # Fields
-    name = models.CharField(max_length=50, unique=True)
-    slug = models.SlugField(editable=False, unique=True, default=random_slug)
-    full_score = models.PositiveIntegerField(default=0)
-    task_description = models.TextField()
+    name              = models.CharField(max_length=50, unique=True)
+    full_score        = models.PositiveIntegerField(default=0)
+    task_description  = models.TextField()
     possible_solution = models.TextField()
-    correction_guideline = models.TextField()
+    slug              = models.SlugField(
+        editable=False, unique=True, default=random_slug)
 
     def __str__(self):
         return self.name
@@ -79,10 +79,11 @@ class SubmissionType(models.Model):
 
 class Student(models.Model):
     # Fields
+    has_logged_in   = models.BooleanField(default=False)
+    name            = models.CharField(max_length=50, default="__no_name__")
+
     matrikel_no = models.CharField(
         unique=True, max_length=8, default=random_matrikel_no)
-    has_logged_in = models.BooleanField(default=False)
-    name = models.CharField(max_length=50, default="__no_name__")
     user = models.OneToOneField(
         User, on_delete=models.CASCADE,
         limit_choices_to={'groups__name': 'Students'},
@@ -92,7 +93,7 @@ class Student(models.Model):
         if self.submissions.all():
             return OrderedDict({
                 s.type : s.feedback.score if hasattr(s, 'feedback') else 0
-                    for s in self.submissions.all()
+                for s in self.submissions.all()
             })
         else:
             return OrderedDict({
@@ -117,25 +118,25 @@ class Student(models.Model):
 class Submission(models.Model):
 
     # Fields
-    slug = models.SlugField(editable=False, unique=True, default=random_slug)
-
-    # This indicates that the student has seen his feedback
-    seen = models.BooleanField(default=False)
-    type = models.ForeignKey(
-        SubmissionType,
-        related_name='submissions'
-    )
-    text = models.TextField(blank=True)
+    seen_by_student = models.BooleanField(default=False)
+    text            = models.TextField(blank=True)
     pre_corrections = models.TextField(blank=True)
-    student = models.ForeignKey(
+    slug            = models.SlugField(
+        editable=False,
+        unique=True,
+        default=random_slug)
+    type            = models.ForeignKey(
+        SubmissionType,
+        related_name='submissions')
+    student         = models.ForeignKey(
         Student,
         on_delete=models.CASCADE,
-        related_name='submissions'
-    )
+        related_name='submissions')
 
     class Meta:
         verbose_name = "Submission"
         verbose_name_plural = "Submission Set"
+        unique_together = (('type', 'student'),)
 
     def __str__(self):
         return "Submission of type '{}' from Student '{}'".format(
@@ -201,21 +202,17 @@ class Feedback(models.Model):
     slug = models.SlugField(
         editable=False,
         unique=True,
-        default=random_slug
-    )
+        default=random_slug)
     of_submission = models.OneToOneField(
         Submission,
         related_name='feedback',
-        blank=False, null=False
-    )
+        blank=False, null=False)
     of_tutor = models.ForeignKey(
-        User, related_name='corrected_submissions',
-    )
+        User, related_name='corrected_submissions',)
     of_reviewer = models.ForeignKey(
         User,
         related_name='reviewed_submissions',
-        blank=True, null=True
-    )
+        blank=True, null=True)
 
     # what is the current status of our feedback
     (
diff --git a/core/serializers.py b/core/serializers.py
index 9323508eaaf0eb21b1b2f2eb3fa8dcd1355778f0..baa9bf28f3105696d0f752a5dca7af2411042aa5 100644
--- a/core/serializers.py
+++ b/core/serializers.py
@@ -1,7 +1,7 @@
 
 from rest_framework import serializers
 
-from core.models import SubmissionType, Student
+from core.models import SubmissionType, Student, Submission
 from django.contrib.auth.models import User
 
 
@@ -40,10 +40,30 @@ class CreateStudentSerializer(serializers.ModelSerializer):
         )
         user.set_password(validated_data['password'])
 
-        student = Student(
+        return Student.objects.create(
             name=validated_data['name'],
             matrikel_no=validated_data['matrikel_no'],
             user=user,
         )
 
-        return student
+class CreateSubmissionSerializer(serializers.ModelSerializer):
+
+    type = serializers.SlugRelatedField(
+        queryset=SubmissionType.objects.all(),
+        slug_field='name'
+     )
+
+    student = serializers.SlugRelatedField(
+        queryset=User.objects.all(),
+        slug_field='username'
+    )
+
+    class Meta:
+        model = Submission
+        fields = ('type', 'text', 'pre_corrections', 'student')
+
+    def create(self, validated_data):
+        validated_data['student'] = validated_data['student'].student
+        return Submission.objects.create(**validated_data)
+
+
diff --git a/core/templates/core/s/student_startpage.html b/core/templates/core/s/student_startpage.html
index ca5a7f723c14abdcf7244beeedf3af11925638dc..9ee3bb14f84c78314c88b3265fb712efc1e1aa84 100644
--- a/core/templates/core/s/student_startpage.html
+++ b/core/templates/core/s/student_startpage.html
@@ -24,7 +24,7 @@
           {% for submission in submission_list %}
           <tr class="align-middle">
             <td class="align-middle">
-              {% if submission.seen %}
+              {% if submission.seen_by_student %}
               <span class="badge badge-success">Seen</span>
               {% endif %}
             </td>
diff --git a/core/views/submission.py b/core/views/submission.py
index 99d4b13c3fb70592a19c7c503bf1497d8c9ecd52..2b93d90c3d2d209ee3f44f86d4073e47f69a5d91 100644
--- a/core/views/submission.py
+++ b/core/views/submission.py
@@ -20,7 +20,7 @@ class SubmissionViewStudent(DetailView):
     def get_object(self):
         obj = Submission.objects.get(slug=self.kwargs['slug'])
         if in_groups(self.request.user, ('Students', )) and hasattr(obj, 'feedback') and obj.feedback.status == Feedback.ACCEPTED:
-            obj.seen = True
+            obj.seen_by_student = True
             obj.save()
         return obj