diff --git a/unisportomat/quiz/admin.py b/unisportomat/quiz/admin.py
index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..83f1f9ab498f769dee9241a828b24bfb45b2b66a 100644
--- a/unisportomat/quiz/admin.py
+++ b/unisportomat/quiz/admin.py
@@ -1,3 +1,7 @@
 from django.contrib import admin
 
 # Register your models here.
+from .models import Sport
+
+admin.site.register(Sport)
+
diff --git a/unisportomat/quiz/migrations/0001_initial.py b/unisportomat/quiz/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..5c06a2fb0e62505cf008fa2552e5ee39e3672ad4
--- /dev/null
+++ b/unisportomat/quiz/migrations/0001_initial.py
@@ -0,0 +1,41 @@
+# Generated by Django 3.2 on 2021-05-13 14:09
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Question',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Sport',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('sportart', models.TextField(choices=[('After Work Fitness', 'After Work Fitness'), ('Ballett', 'Ballett'), ('Basketball', 'Basketball'), ('Beachvolleyball', 'Beachvolleyball'), ('Bouldern', 'Bouldern'), ('Drachenfliegen', 'Drachenfliegen'), ('Functional Fitness', 'Functional Fitness'), ('Gerätturnen', 'Gerätturnen'), ('HIIT', 'HIIT'), ('Karate', 'Karate'), ('Kickboxen', 'Kickboxen'), ('Laufen', 'Laufen'), ('Pilates', 'Pilates'), ('Qigong', 'Qigong'), ('Rückenfit', 'Rückenfit'), ('Segeln Sportbootführerschein', 'Segeln Sportbootführerschein'), ('Skilanglauf & Schneeschuhwandern', 'Skilanglauf & Schneeschuhwandern'), ('Sweat & Relax', 'Sweat & Relax'), ('Tennis', 'Tennis'), ('Ultimate Frisbee', 'Ultimate Frisbee'), ('Yoga', 'Yoga')])),
+                ('field', models.CharField(choices=[('indoor', 'indoor'), ('outdoor', 'outdoor')], default='outdoor', max_length=50)),
+                ('einzelsport', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
+                ('mannschaftssport', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
+                ('ausdauer', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
+                ('kraft', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
+                ('kampfsport', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
+                ('technischakrobatisch', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10)], default=1)),
+                ('url', models.TextField()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Wissensnack',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+            ],
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0002_wissensnack_text.py b/unisportomat/quiz/migrations/0002_wissensnack_text.py
new file mode 100644
index 0000000000000000000000000000000000000000..20fd1d371f60443517475df21fcf5b0b6342d5a3
--- /dev/null
+++ b/unisportomat/quiz/migrations/0002_wissensnack_text.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2 on 2021-05-13 14:59
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='wissensnack',
+            name='text',
+            field=models.TextField(default=''),
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0003_auto_20210517_1437.py b/unisportomat/quiz/migrations/0003_auto_20210517_1437.py
new file mode 100644
index 0000000000000000000000000000000000000000..4e6953460c22392b3824c53fb5d62762314fd3d9
--- /dev/null
+++ b/unisportomat/quiz/migrations/0003_auto_20210517_1437.py
@@ -0,0 +1,24 @@
+# Generated by Django 3.2 on 2021-05-17 14:37
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0002_wissensnack_text'),
+    ]
+
+    operations = [
+        migrations.DeleteModel(
+            name='Question',
+        ),
+        migrations.DeleteModel(
+            name='Wissensnack',
+        ),
+        migrations.RenameField(
+            model_name='sport',
+            old_name='sportart',
+            new_name='name',
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0004_criterion.py b/unisportomat/quiz/migrations/0004_criterion.py
new file mode 100644
index 0000000000000000000000000000000000000000..27e8269d5509359d011b2518dfbce4704a8a1af9
--- /dev/null
+++ b/unisportomat/quiz/migrations/0004_criterion.py
@@ -0,0 +1,20 @@
+# Generated by Django 3.2 on 2021-05-17 14:44
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0003_auto_20210517_1437'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Criterion',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.TextField()),
+            ],
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0005_auto_20210517_1520.py b/unisportomat/quiz/migrations/0005_auto_20210517_1520.py
new file mode 100644
index 0000000000000000000000000000000000000000..8e09d6b4705d14c67c2e5d542d66cf9375551fc5
--- /dev/null
+++ b/unisportomat/quiz/migrations/0005_auto_20210517_1520.py
@@ -0,0 +1,29 @@
+# Generated by Django 3.2 on 2021-05-17 15:20
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0004_criterion'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='CriterionRating',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('rating', models.IntegerField(validators=[django.core.validators.MaxValueValidator(10), django.core.validators.MinValueValidator(0)])),
+                ('criterion', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.criterion')),
+                ('sport', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.sport')),
+            ],
+        ),
+        migrations.AddField(
+            model_name='sport',
+            name='criterion_ratings',
+            field=models.ManyToManyField(through='quiz.CriterionRating', to='quiz.Criterion'),
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0006_rename_criterion_ratings_sport_criteria_ratings.py b/unisportomat/quiz/migrations/0006_rename_criterion_ratings_sport_criteria_ratings.py
new file mode 100644
index 0000000000000000000000000000000000000000..8ec40ee5f142717b74fe0d9de19c44a15c3d7509
--- /dev/null
+++ b/unisportomat/quiz/migrations/0006_rename_criterion_ratings_sport_criteria_ratings.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2 on 2021-05-17 15:20
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0005_auto_20210517_1520'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='sport',
+            old_name='criterion_ratings',
+            new_name='criteria_ratings',
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0007_auto_20210518_1521.py b/unisportomat/quiz/migrations/0007_auto_20210518_1521.py
new file mode 100644
index 0000000000000000000000000000000000000000..943e8ac6d5a18ec3cce24fcaf0a1368263ee6f84
--- /dev/null
+++ b/unisportomat/quiz/migrations/0007_auto_20210518_1521.py
@@ -0,0 +1,46 @@
+# Generated by Django 3.2 on 2021-05-18 15:21
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0006_rename_criterion_ratings_sport_criteria_ratings'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='sport',
+            name='ausdauer',
+        ),
+        migrations.RemoveField(
+            model_name='sport',
+            name='einzelsport',
+        ),
+        migrations.RemoveField(
+            model_name='sport',
+            name='field',
+        ),
+        migrations.RemoveField(
+            model_name='sport',
+            name='kampfsport',
+        ),
+        migrations.RemoveField(
+            model_name='sport',
+            name='kraft',
+        ),
+        migrations.RemoveField(
+            model_name='sport',
+            name='mannschaftssport',
+        ),
+        migrations.RemoveField(
+            model_name='sport',
+            name='technischakrobatisch',
+        ),
+        migrations.AlterField(
+            model_name='sport',
+            name='name',
+            field=models.TextField(),
+        ),
+    ]
diff --git a/unisportomat/quiz/migrations/0008_alter_sport_url.py b/unisportomat/quiz/migrations/0008_alter_sport_url.py
new file mode 100644
index 0000000000000000000000000000000000000000..880d73b6f7ae6a9408c68e5a74dc71b77250cbf7
--- /dev/null
+++ b/unisportomat/quiz/migrations/0008_alter_sport_url.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2 on 2021-05-18 15:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('quiz', '0007_auto_20210518_1521'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='sport',
+            name='url',
+            field=models.URLField(),
+        ),
+    ]
diff --git a/unisportomat/quiz/models.py b/unisportomat/quiz/models.py
index 630c195ac0d3480e2c197f3c24d71ca1c6a2f2e9..e81a365a656586612724e686dca11a476df99bcc 100644
--- a/unisportomat/quiz/models.py
+++ b/unisportomat/quiz/models.py
@@ -1,65 +1,31 @@
+from django.core.validators import MaxValueValidator, MinValueValidator
 from django.db import models
 
-# Create your models here.
 
-class Sport(models.Model):
-    bewertungsskala = []
-    for i in range(1,11):
-        bewertungsskala.append((i,i))
-
-    sportart_list = [
-        ('After Work Fitness','After Work Fitness'),
-        ('Ballett','Ballett'),
-        ('Basketball','Basketball'),
-        ('Beachvolleyball','Beachvolleyball'),
-        ('Bouldern','Bouldern'),
-        ('Drachenfliegen','Drachenfliegen'),
-        ('Functional Fitness','Functional Fitness'),
-        ('Gerätturnen','Gerätturnen'),
-        ('HIIT','HIIT'),
-        ('Karate','Karate'),
-        ('Kickboxen','Kickboxen'),
-        ('Laufen','Laufen'),
-        ('Pilates','Pilates'),
-        ('Qigong','Qigong'),
-        ('Rückenfit','Rückenfit'),
-        ('Segeln Sportbootführerschein','Segeln Sportbootführerschein'),
-        ('Skilanglauf & Schneeschuhwandern','Skilanglauf & Schneeschuhwandern'),
-        ('Sweat & Relax','Sweat & Relax'),
-        ('Tennis','Tennis'),
-        ('Ultimate Frisbee','Ultimate Frisbee'),
-        ('Yoga','Yoga')
+class CriterionRating(models.Model):
+    rating = models.IntegerField(
+        validators=[MaxValueValidator(10), MinValueValidator(0)] # validation on user level (not db level)
+    )
+    criterion = models.ForeignKey("Criterion", on_delete=models.CASCADE)
+    sport = models.ForeignKey("Sport", on_delete=models.CASCADE)
 
-    ]
 
-    fields = [
-        ('indoor','indoor'),
-        ('outdoor','outdoor')
-    ]
+class Sport(models.Model):
+    name = models.TextField()
+    url = models.URLField()
+    criteria_ratings = models.ManyToManyField("Criterion", through="CriterionRating")
 
-    sportart                = models.TextField(choices=sportart_list)
-    field                   = models.CharField(default='outdoor',max_length=50,choices=fields)
-    einzelsport             = models.IntegerField(default=1,choices=bewertungsskala)
-    mannschaftssport        = models.IntegerField(default=1,choices=bewertungsskala)
-    ausdauer                = models.IntegerField(default=1,choices=bewertungsskala)
-    kraft                   = models.IntegerField(default=1,choices=bewertungsskala)
-    kampfsport              = models.IntegerField(default=1,choices=bewertungsskala)
-    technischakrobatisch    = models.IntegerField(default=1,choices=bewertungsskala)
-    url                     = models.TextField()#URLField liefert Error
-    
-    
     def __str__(self):
-        return self.sportart
-
-#fragen-class
-class Question(models.Model):
-    pass
-
-
+        return self.name
 
-#Wissensnack
-class Wissensnack(models.Model):
-    pass
+    def rate(self, criterion, rating):
+        rating = CriterionRating(sport=self, criterion=criterion, rating=10)
+        rating.save()
 
+    def get_rating(self, criterion):
+        criterion_rating = CriterionRating.objects.get(sport=self, criterion=criterion)
+        return criterion_rating.rating
 
 
+class Criterion(models.Model):
+    name = models.TextField()
diff --git a/unisportomat/quiz/tests.py b/unisportomat/quiz/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..5700962719460b6d30fe198818405e5b46073212 100644
--- a/unisportomat/quiz/tests.py
+++ b/unisportomat/quiz/tests.py
@@ -1,3 +1,48 @@
 from django.test import TestCase
 
-# Create your tests here.
+from .models import Sport, Criterion
+
+
+class SportModelTest(TestCase):
+    def setUp(self):
+        self.name = "HIIT"
+        self.url = "https://www.buchsys.de/fu-berlin/angebote/aktueller_zeitraum/_HIIT_-_High_Intensity_Interval_Training___HOME.html"
+
+        self.testSport = Sport(
+            name=self.name,
+            url=self.url,
+        )
+
+        self.testSport.save()
+
+    def test_sport_can_be_created(self):
+        self.assertEquals(self.testSport.name, self.name)
+        self.assertEquals(self.testSport.url, self.url)
+
+
+class CriterionRatingTest(TestCase):
+    def setUp(self):
+        self.name = "HIIT"
+        self.url = "https://www.buchsys.de/fu-berlin/angebote/aktueller_zeitraum/_HIIT_-_High_Intensity_Interval_Training___HOME.html"
+
+        self.testSport = Sport(
+            name=self.name,
+            url=self.url,
+        )
+
+        self.testSport.save()
+
+        self.criterion = Criterion(name="Einzelsport")
+        self.criterion.save()
+
+    def test_can_rate_criterion_for_sport(self):
+        self.testSport.rate(self.criterion, 10)
+        self.assertEquals(self.testSport.criteria_ratings.first(), self.criterion)
+        self.assertEquals(self.testSport.get_rating(self.criterion), 10)
+
+
+class CriterionModelTest(TestCase):
+    def test_criterion_can_be_created(self):
+        name = "Einzelsport"
+        test_criterion = Criterion(name=name)
+        self.assertEquals(test_criterion.name, name)
diff --git a/unisportomat/unisportomat/settings.py b/unisportomat/unisportomat/settings.py
index 511778922d9ff448581c1ea06294dbd7f530f096..23f0cbdb1ed78fc8b2dfd21a2e5c4e27ac3eca39 100644
--- a/unisportomat/unisportomat/settings.py
+++ b/unisportomat/unisportomat/settings.py
@@ -31,6 +31,7 @@ ALLOWED_HOSTS = []
 # Application definition
 
 INSTALLED_APPS = [
+    'quiz.apps.QuizConfig',
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',