diff --git a/src/account/auth_pipeline.py b/src/account/auth_pipeline.py
index b1918c536d09e7b1de94f3c63c249ed6eff9e5f2..abd99b924b4e7a62570c3eea830e64c87660bb9c 100644
--- a/src/account/auth_pipeline.py
+++ b/src/account/auth_pipeline.py
@@ -8,4 +8,4 @@ def create_profile(backend, user, response, *args, **kwargs):
         try:
             user.profile
         except exceptions.ObjectDoesNotExist:
-            models.Profile.objects.create(user=user)
+            models.Profile.objects.create(user=user, )
diff --git a/src/account/migrations/0003_auto_20190106_1846.py b/src/account/migrations/0003_auto_20190106_1846.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c4f05b384b49fdbfcdf90f2554089267f290912
--- /dev/null
+++ b/src/account/migrations/0003_auto_20190106_1846.py
@@ -0,0 +1,26 @@
+# Generated by Django 2.0.1 on 2019-01-06 17:46
+
+import common.middleware
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('account', '0002_profile_role'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='profile',
+            name='role',
+            field=models.CharField(choices=[('Staff', 'Staff'), ('Applicant', 'Applicant'), ('Student', 'Student')], default='Applicant', max_length=10),
+        ),
+        migrations.AlterField(
+            model_name='profile',
+            name='user',
+            field=models.OneToOneField(default=common.middleware.CurrentUserMiddleware.get_current_user, on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/src/account/migrations/0004_auto_20190107_2218.py b/src/account/migrations/0004_auto_20190107_2218.py
new file mode 100644
index 0000000000000000000000000000000000000000..b4ab1f0dea6c2ea83c188c6e91161552ae9e822c
--- /dev/null
+++ b/src/account/migrations/0004_auto_20190107_2218.py
@@ -0,0 +1,20 @@
+# Generated by Django 2.0.1 on 2019-01-07 21:18
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('account', '0003_auto_20190106_1846'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='profile',
+            name='user',
+            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/src/account/models.py b/src/account/models.py
index 4ebe686bd56ce176040582981f9e7f83d8c8f400..66cbf6c9679fd8a191d4a9e57d4303ad90d5d141 100644
--- a/src/account/models.py
+++ b/src/account/models.py
@@ -1,7 +1,7 @@
 from django.db import models
 from django.contrib.auth.models import User
 from solo.models import SingletonModel
-
+from common.middleware import CurrentUserMiddleware
 
 class GroupChoice(models.Model):
     TEAMS = (
@@ -26,7 +26,11 @@ class Profile(models.Model):
     )
     join_date = models.DateTimeField(auto_now_add=True, editable=False)
     updated_at = models.DateTimeField(auto_now=True, editable=False)
-    user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
+    user = models.OneToOneField(
+        User,
+        related_name='profile',
+        on_delete=models.CASCADE,
+    )
     # TODO: Change the default to json render side
     motivation_about = models.TextField(blank=True, default='')
     motivation_profession = models.TextField(blank=True, default='')
@@ -34,7 +38,7 @@ class Profile(models.Model):
     nick = models.CharField(max_length=15, blank=True, default='')
     signed = models.BooleanField(default=False, null=False)
     groups = models.ManyToManyField(GroupChoice, related_name='profiles')
-    role = models.CharField(max_length=10, choices=ROLES, default='Applicant', unique=True)
+    role = models.CharField(max_length=10, choices=ROLES, default='Applicant',)
 
     @property
     def full_name(self):
diff --git a/src/account/serializers.py b/src/account/serializers.py
index 0cf14877821160a38115d33ceba4cd0155150d93..fd5f20fa1dff87dc6b67f05513a9ef5560b94a08 100644
--- a/src/account/serializers.py
+++ b/src/account/serializers.py
@@ -1,5 +1,6 @@
 from rest_framework import serializers
 from account import models
+from common.middleware import CurrentUserMiddleware
 
 
 class ChoiceSerializer(serializers.ModelSerializer):
@@ -9,19 +10,17 @@ class ChoiceSerializer(serializers.ModelSerializer):
 
 
 class ProfileSerializer(serializers.ModelSerializer):
-    groups = serializers.SlugRelatedField(many=True, slug_field="choice", queryset=models.GroupChoice.objects.all())
+    groups = serializers.SlugRelatedField(many=True, slug_field='choice', queryset=models.GroupChoice.objects.all())
     updated_at = serializers.DateTimeField(read_only=True)
     signed = serializers.BooleanField()
     full_name = serializers.SerializerMethodField()
 
     class Meta:
         model = models.Profile
-        read_only_fields = ('role', )
         fields = (
             'id',
             'join_date',
             'updated_at',
-            'user',
             'nick',
             'signed',
             'groups',
@@ -34,12 +33,14 @@ class ProfileSerializer(serializers.ModelSerializer):
 
     def validate(self, data):
         deadline = models.Deadline.get_solo().deadline
-        if deadline is None:
-            return data
-
-        if data['signed'] is True and data['updated_at'] > deadline:
+        if data['signed'] is False:
+            raise serializers.ValidationError("You cannot join without signed")
+        if deadline is not None and data['updated_at'] > deadline:
             raise serializers.ValidationError("You cannot join after the deadline")
-
+        modifier_role = CurrentUserMiddleware.get_current_user_profile().role
+        role = data['role']
+        if role is not None and modifier_role != 'Staff':
+            raise serializers.ValidationError("You don't have permission to change role")
         return data
 
     def get_full_name(self, obj):
diff --git a/src/account/views.py b/src/account/views.py
index 9ceaeb88d17e0fda47dd2fe606325c6046fa51be..79ab7de30163a980004e2f16cf5e355befcf2b05 100644
--- a/src/account/views.py
+++ b/src/account/views.py
@@ -14,6 +14,9 @@ class ProfileViewSet(viewsets.ModelViewSet):
     def get_queryset(self):
         user = self.request.user
         if user.has_perm(permissions.IsAdminUser):
+            role = self.request.query_params.get("role", None)
+            if role is not None:
+                return models.Profile.objects.filter(role=role)
             return models.Profile.objects.all()
         return models.Profile.objects.filter(pk=user.profile.id)
 
diff --git a/src/common/middleware.py b/src/common/middleware.py
index 98f8f62ed9dd1c4d94acef20c8a85ecfb0670dba..82f040c15458facfd7e6603558465825b2dc4c4a 100644
--- a/src/common/middleware.py
+++ b/src/common/middleware.py
@@ -12,7 +12,8 @@ class CurrentUserMiddleware(object):
         _profile.value = request.user
         return self.get_response(request)
 
-
-    #@property
     def get_current_user_profile():
         return _profile.value.profile
+
+    def get_current_user():
+        return _profile.value
diff --git a/src/document/migrations/0002_auto_20190113_1239.py b/src/document/migrations/0002_auto_20190113_1239.py
new file mode 100644
index 0000000000000000000000000000000000000000..59c9ba8dcb78053ee81c265b4aa827a0f0257132
--- /dev/null
+++ b/src/document/migrations/0002_auto_20190113_1239.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.0.1 on 2019-01-13 11:39
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('document', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='document',
+            old_name='files',
+            new_name='file',
+        ),
+    ]
diff --git a/src/document/migrations/0003_document_solution.py b/src/document/migrations/0003_document_solution.py
new file mode 100644
index 0000000000000000000000000000000000000000..fef922a0e5a9e42fe1562f1d05fccb5c7904e75a
--- /dev/null
+++ b/src/document/migrations/0003_document_solution.py
@@ -0,0 +1,20 @@
+# Generated by Django 2.0.1 on 2019-01-13 11:41
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('homework', '0003_auto_20190113_1239'),
+        ('document', '0002_auto_20190113_1239'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='document',
+            name='solution',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='files', to='homework.Solution'),
+        ),
+    ]
diff --git a/src/document/models.py b/src/document/models.py
index 80ba10103fa448c7231e574eeed62a657fa9ff80..0d5d5f8ce7643b56d9fe484cf22a1eabd4e39a54 100644
--- a/src/document/models.py
+++ b/src/document/models.py
@@ -2,6 +2,7 @@ from django.db import models
 from django.core import validators
 
 from account.models import Profile
+from homework.models import Solution
 from common.validators import FileSizeValidator
 
 
@@ -10,7 +11,7 @@ class Document(models.Model):
     uploaded_at = models.DateTimeField(auto_now_add=True, editable=False)
     name = models.CharField(max_length=150)
     description = models.TextField()
-    files = models.FileField(
+    file = models.FileField(
         validators=[
             validators.FileExtensionValidator([
                 'png',
@@ -21,6 +22,7 @@ class Document(models.Model):
             FileSizeValidator(size_limit=52428800),  # 52428800 - 50MiB
         ],
     )
+    solution = models.ForeignKey(Solution, related_name='files', on_delete=models.DO_NOTHING, blank=True, null=True,)
 
     def __str__(self):
         return self.name
diff --git a/src/document/serializers.py b/src/document/serializers.py
index 3308ced6d3dadeaa53862927f7e921967931e1f5..cea73e36ba326264a31b589607f59055eb890fc7 100644
--- a/src/document/serializers.py
+++ b/src/document/serializers.py
@@ -10,7 +10,7 @@ class DocumentSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = models.Document
-        fields = ('uploaded_by', 'uploaded_at', 'name', 'description', 'file')
+        fields = ('uploaded_by', 'uploaded_at', 'name', 'description', 'file', 'uploaded_by_name', 'solution', )
 
     def get_uploaded_by_name(self, obj):
         return obj.uploaded_by.full_name
diff --git a/src/homework/migrations/0003_auto_20190113_1239.py b/src/homework/migrations/0003_auto_20190113_1239.py
new file mode 100644
index 0000000000000000000000000000000000000000..e06f6b326d17fc96b3174b5448bbe8dbde250940
--- /dev/null
+++ b/src/homework/migrations/0003_auto_20190113_1239.py
@@ -0,0 +1,28 @@
+# Generated by Django 2.0.1 on 2019-01-13 11:39
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('homework', '0002_auto_20190105_1922'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='solution',
+            name='files',
+        ),
+        migrations.AlterField(
+            model_name='solution',
+            name='created_by',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='solution', to='account.Profile'),
+        ),
+        migrations.AlterField(
+            model_name='solution',
+            name='task',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='solution', to='homework.Task'),
+        ),
+    ]
diff --git a/src/homework/models.py b/src/homework/models.py
index 5585d8dd4e17871e57dd379bb8c3c5f7ad41ea02..0e5ec4eecf89840db4446de752faf0c8b4cbb66f 100755
--- a/src/homework/models.py
+++ b/src/homework/models.py
@@ -5,6 +5,7 @@ from common.validators import FileSizeValidator
 from account.models import Profile
 
 
+
 class Task(models.Model):
     created_by = models.ForeignKey(Profile, on_delete=models.DO_NOTHING)
     created_at = models.DateTimeField(auto_now_add=True, editable=False)
@@ -12,31 +13,19 @@ class Task(models.Model):
     title = models.CharField(max_length=150)
     text = models.TextField()
     deadline = models.DateTimeField()
-    # dokumentum kezeles
 
     def __str__(self):
         return self.title
 
 
 class Solution(models.Model):
-    task = models.ForeignKey(Task, related_name='task_solution', on_delete=models.CASCADE)
-    created_by = models.ForeignKey(Profile, related_name='student_solution', on_delete=models.DO_NOTHING)
+    task = models.ForeignKey(Task, related_name='solution', on_delete=models.CASCADE)
+    created_by = models.ForeignKey(Profile, related_name='solution', on_delete=models.DO_NOTHING)
     created_at = models.DateTimeField(auto_now_add=True, editable=False)
     updated_at = models.DateTimeField(auto_now=True, editable=False)
     note = models.TextField()
     accepted = models.BooleanField()
     corrected = models.BooleanField()
-    files = models.FileField(
-        validators=[
-            validators.FileExtensionValidator([
-                'png',
-                'jpeg',
-                'jpg',
-                'zip',
-            ]),
-            FileSizeValidator(size_limit=52428800),  # 52428800 - 50MiB
-        ],
-    )
 
     def __str__(self):
         return "[{}] {}".format(self.created_at, self.created_by.full_name)
diff --git a/src/homework/serializers.py b/src/homework/serializers.py
index 66ffdaed144c5585c9a146136dbe6f661d37c038..d2615a1ee9c8fb3a6f0a39df82b85991f0899d17 100755
--- a/src/homework/serializers.py
+++ b/src/homework/serializers.py
@@ -26,7 +26,7 @@ class SolutionSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = models.Solution
-        read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready')
+        read_only_fields = ('created_by', 'created_at', 'updated_at', 'ready', 'files')
         fields = (
             'task',
             'created_at',
diff --git a/src/news/serializers.py b/src/news/serializers.py
index 434d8c810e92c640f55b7b236b2ba0a684346bf7..514c63bd416184b25ca57672ed24a276c72a382d 100644
--- a/src/news/serializers.py
+++ b/src/news/serializers.py
@@ -6,6 +6,7 @@ from common.serializers import CurrentUserProfileDefault
 class ArticleSerializer(serializers.ModelSerializer):
     updated_by = serializers.HiddenField(default=CurrentUserProfileDefault())
     last_update_by = serializers.SerializerMethodField()
+    author = serializers.SerializerMethodField()
 
     class Meta:
         model = Article
@@ -13,4 +14,7 @@ class ArticleSerializer(serializers.ModelSerializer):
         fields = '__all__'
 
     def get_last_update_by(self, obj):
-        return obj.updated_by.id
+        return obj.updated_by.full_name
+
+    def get_author(self, obj):
+        return obj.author.full_name
diff --git a/src/role/urls.py b/src/role/urls.py
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/stats/admin.py b/src/stats/admin.py
index 050ebd1b03b37e58ab3bec15a2624270a5e37082..fb841605335f9cd12025ed91abe5361dc7f806f5 100644
--- a/src/stats/admin.py
+++ b/src/stats/admin.py
@@ -15,7 +15,7 @@ class EventAdmin(ExportMixin, admin.ModelAdmin):
 
 @admin.register(models.Note)
 class NoteAdmin(ExportMixin, admin.ModelAdmin):
-    list_display = ('user', 'note', 'event', 'created_by', 'created_at', 'updated_at')
-    list_filter = ('user', 'created_by', 'event')
+    list_display = ('profile', 'note', 'event', 'created_by', 'created_at', 'updated_at')
+    list_filter = ('profile', 'created_by', 'event')
     search_fields = ('event__name', 'note')
     resource_class = resources.NoteResource
diff --git a/src/stats/migrations/0001_initial.py b/src/stats/migrations/0001_initial.py
index 444036a4d2dfba375360039a0e3f964eaac13655..1464e8c4d274f2d082373f47fac63a1ef48b5db9 100644
--- a/src/stats/migrations/0001_initial.py
+++ b/src/stats/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.0.1 on 2018-12-24 16:02
+# Generated by Django 2.0.1 on 2019-01-07 21:18
 
 from django.db import migrations, models
 import django.db.models.deletion
@@ -9,7 +9,7 @@ class Migration(migrations.Migration):
     initial = True
 
     dependencies = [
-        ('account', '0001_initial'),
+        ('account', '0004_auto_20190107_2218'),
     ]
 
     operations = [
@@ -21,7 +21,7 @@ class Migration(migrations.Migration):
                 ('date', models.DateTimeField()),
                 ('created_at', models.DateTimeField(auto_now_add=True)),
                 ('updated_at', models.DateTimeField(auto_now=True)),
-                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_event', to='account.Profile')),
+                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='created_event', to='account.Profile')),
                 ('visitors', models.ManyToManyField(related_name='visitor', to='account.Profile')),
             ],
         ),
@@ -32,9 +32,9 @@ class Migration(migrations.Migration):
                 ('note', models.TextField()),
                 ('created_at', models.DateTimeField(auto_now_add=True)),
                 ('updated_at', models.DateTimeField(auto_now=True)),
-                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='created_notes', to='account.Profile')),
-                ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes_event', to='stats.Event')),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notes_user', to='account.Profile')),
+                ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='created_notes', to='account.Profile')),
+                ('event', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='stats.Event')),
+                ('profile', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='account.Profile')),
             ],
         ),
     ]
diff --git a/src/stats/migrations/0002_auto_20190107_2220.py b/src/stats/migrations/0002_auto_20190107_2220.py
new file mode 100644
index 0000000000000000000000000000000000000000..e088f2dfb28b840e16f6f3584ec4a5c881bce1f7
--- /dev/null
+++ b/src/stats/migrations/0002_auto_20190107_2220.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.0.1 on 2019-01-07 21:20
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('stats', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='note',
+            name='event',
+            field=models.ForeignKey(blank=True, default='', on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='stats.Event'),
+        ),
+        migrations.AlterField(
+            model_name='note',
+            name='profile',
+            field=models.ForeignKey(blank=True, default='', on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='account.Profile'),
+        ),
+    ]
diff --git a/src/stats/migrations/0003_auto_20190105_2227.py b/src/stats/migrations/0003_auto_20190105_2227.py
deleted file mode 100644
index 3e826f0240a8e3ea7a4fc32469ec3c12d61b2515..0000000000000000000000000000000000000000
--- a/src/stats/migrations/0003_auto_20190105_2227.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Generated by Django 2.0.1 on 2019-01-05 21:27
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('stats', '0002_auto_20190105_2221'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='note',
-            name='event',
-            field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, related_name='notes_event', to='stats.Event'),
-        ),
-        migrations.AlterField(
-            model_name='note',
-            name='user',
-            field=models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, related_name='notes_user', to='account.Profile'),
-        ),
-    ]
diff --git a/src/stats/migrations/0003_auto_20190107_2224.py b/src/stats/migrations/0003_auto_20190107_2224.py
new file mode 100644
index 0000000000000000000000000000000000000000..dc96481d82ae7579977886df0d422a12d26ee01a
--- /dev/null
+++ b/src/stats/migrations/0003_auto_20190107_2224.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.0.1 on 2019-01-07 21:24
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('stats', '0002_auto_20190107_2220'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='note',
+            name='event',
+            field=models.ForeignKey(blank=True, default='', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='stats.Event'),
+        ),
+        migrations.AlterField(
+            model_name='note',
+            name='profile',
+            field=models.ForeignKey(blank=True, default='', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='account.Profile'),
+        ),
+    ]
diff --git a/src/stats/migrations/0004_auto_20190105_2227.py b/src/stats/migrations/0004_auto_20190105_2227.py
deleted file mode 100644
index 48f1c3687c99af521557572ee5b43ab6753c5c0b..0000000000000000000000000000000000000000
--- a/src/stats/migrations/0004_auto_20190105_2227.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Generated by Django 2.0.1 on 2019-01-05 21:27
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('stats', '0003_auto_20190105_2227'),
-    ]
-
-    operations = [
-        migrations.AlterField(
-            model_name='note',
-            name='event',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes_event', to='stats.Event'),
-        ),
-        migrations.AlterField(
-            model_name='note',
-            name='user',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes_user', to='account.Profile'),
-        ),
-    ]
diff --git a/src/stats/migrations/0002_auto_20190105_2221.py b/src/stats/migrations/0004_auto_20190113_1239.py
similarity index 62%
rename from src/stats/migrations/0002_auto_20190105_2221.py
rename to src/stats/migrations/0004_auto_20190113_1239.py
index ac48b18a93a3d57d6fc4de8a0338260b25bfa776..c6d5a7810b77f984ed4d6883193af9cab6b2f13f 100644
--- a/src/stats/migrations/0002_auto_20190105_2221.py
+++ b/src/stats/migrations/0004_auto_20190113_1239.py
@@ -1,4 +1,4 @@
-# Generated by Django 2.0.1 on 2019-01-05 21:21
+# Generated by Django 2.0.1 on 2019-01-13 11:39
 
 from django.db import migrations, models
 import django.db.models.deletion
@@ -7,18 +7,18 @@ import django.db.models.deletion
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('stats', '0001_initial'),
+        ('stats', '0003_auto_20190107_2224'),
     ]
 
     operations = [
         migrations.AlterField(
             model_name='note',
             name='event',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes_event', to='stats.Event'),
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='stats.Event'),
         ),
         migrations.AlterField(
             model_name='note',
-            name='user',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes_user', to='account.Profile'),
+            name='profile',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notes', to='account.Profile'),
         ),
     ]
diff --git a/src/stats/models.py b/src/stats/models.py
index 0b2c91d6e7f22facba041f20ddc75bde720bb6d5..ed09f1115ca73dbdca23b3c3610fae5921d4b36d 100644
--- a/src/stats/models.py
+++ b/src/stats/models.py
@@ -8,7 +8,7 @@ class Event(models.Model):
     name = models.CharField(max_length=255)
     date = models.DateTimeField(null=False)
     visitors = models.ManyToManyField(Profile, related_name='visitor')
-    created_by = models.ForeignKey(Profile, related_name='created_event', on_delete=models.CASCADE)
+    created_by = models.ForeignKey(Profile, related_name='created_event', on_delete=models.DO_NOTHING)
     created_at = models.DateTimeField(auto_now_add=True, editable=False)
     updated_at = models.DateTimeField(auto_now=True, editable=False)
 
@@ -17,10 +17,10 @@ class Event(models.Model):
 
 
 class Note(models.Model):
-    event = models.ForeignKey(Event, related_name='notes_event', on_delete=models.CASCADE, blank=True, null=True, )
-    user = models.ForeignKey(Profile, related_name='notes_user', on_delete=models.CASCADE, blank=True, null=True, )
+    event = models.ForeignKey(Event, related_name='notes', on_delete=models.CASCADE, blank=True, null=True,)
+    profile = models.ForeignKey(Profile, related_name='notes', on_delete=models.CASCADE, blank=True, null=True,)
     note = models.TextField()
-    created_by = models.ForeignKey(Profile, related_name='created_notes', on_delete=models.CASCADE)
+    created_by = models.ForeignKey(Profile, related_name='created_notes', on_delete=models.DO_NOTHING)
     created_at = models.DateTimeField(auto_now_add=True, editable=False)
     updated_at = models.DateTimeField(auto_now=True, editable=False)
 
diff --git a/src/stats/serializers.py b/src/stats/serializers.py
index b2f4a76ab1a720f5435987f3a5eab5ad784eaf59..63cc6ce83b8e05ecaecbd7c3eba67783818276fa 100644
--- a/src/stats/serializers.py
+++ b/src/stats/serializers.py
@@ -31,3 +31,8 @@ class NoteSerializer(serializers.ModelSerializer):
 
     def get_created_by_name(self, obj):
         return obj.created_by.full_name
+
+    def validate(self, data):
+        if data['profile'] is None and data['event'] is None:
+            raise serializers.ValidationError('You have to add profile or event')
+        return data