diff --git a/src/account/admin.py b/src/account/admin.py
index 388129c8f6d559b75b77afdd0cdf57bab932fd9c..37427a6cd7aeb3a160d67350ecb520c66f2e7bf2 100644
--- a/src/account/admin.py
+++ b/src/account/admin.py
@@ -8,7 +8,7 @@ from . import resources
 
 @admin.register(models.Profile)
 class ProfileAdmin(ExportMixin, admin.ModelAdmin):
-    list_display = ('user_username', 'join_date')
+    list_display = ('user_username', 'full_name', 'join_date')
     resource_class = resources.SignUpResource
 
     def user_username(self, obj):
diff --git a/src/account/models.py b/src/account/models.py
index 0d401930c244a8ea9bbf38f192e12f69dd870bb2..71b79f0c59102fe236def8d5459f6e3170e9f417 100644
--- a/src/account/models.py
+++ b/src/account/models.py
@@ -29,10 +29,13 @@ 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')
-    # Homeworks=models.ForeignKey(Homework)
+
+    @property
+    def full_name(self):
+        return self.user.get_full_name()
 
     def __str__(self):
-        return self.user.username
+        return self.full_name
 
 
 class Deadline(SingletonModel):
diff --git a/src/stats/admin.py b/src/stats/admin.py
index a551546486611e9b0125f25096c0125c1c1e962f..050ebd1b03b37e58ab3bec15a2624270a5e37082 100644
--- a/src/stats/admin.py
+++ b/src/stats/admin.py
@@ -1,5 +1,21 @@
 from django.contrib import admin
-from .models import KszkEvent
+from import_export.admin import ExportMixin
 
+from . import models
+from . import resources
 
-admin.site.register(KszkEvent)
+
+@admin.register(models.Event)
+class EventAdmin(ExportMixin, admin.ModelAdmin):
+    filter_horizontal = ('visitors', )
+    list_filter = ('name', 'date')
+    search_fields = ('name', )
+    resource_class = resources.EventResource
+
+
+@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')
+    search_fields = ('event__name', 'note')
+    resource_class = resources.NoteResource
diff --git a/src/stats/migrations/0005_auto_20180214_2206.py b/src/stats/migrations/0005_auto_20180214_2206.py
new file mode 100644
index 0000000000000000000000000000000000000000..f4a0033cc39e3b8b311676b83ca7fdb22fa3bccf
--- /dev/null
+++ b/src/stats/migrations/0005_auto_20180214_2206.py
@@ -0,0 +1,30 @@
+# Generated by Django 2.0.1 on 2018-02-14 21:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('account', '0017_auto_20180205_2004'),
+        ('stats', '0004_remove_kszkevent_num_of_pers'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Event',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('name', models.CharField(max_length=255)),
+                ('date', models.DateTimeField()),
+                ('visitors', models.ManyToManyField(related_name='visitor', to='account.Profile')),
+            ],
+        ),
+        migrations.RemoveField(
+            model_name='kszkevent',
+            name='visitors',
+        ),
+        migrations.DeleteModel(
+            name='KszkEvent',
+        ),
+    ]
diff --git a/src/stats/migrations/0006_auto_20180214_2239.py b/src/stats/migrations/0006_auto_20180214_2239.py
new file mode 100644
index 0000000000000000000000000000000000000000..11bcd479e58a3a965982f251caa3b021c98273f2
--- /dev/null
+++ b/src/stats/migrations/0006_auto_20180214_2239.py
@@ -0,0 +1,19 @@
+# Generated by Django 2.0.1 on 2018-02-14 21:39
+
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('stats', '0005_auto_20180214_2206'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='event',
+            name='visitors',
+            field=models.ManyToManyField(related_name='visitor', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/src/stats/migrations/0007_auto_20180215_0018.py b/src/stats/migrations/0007_auto_20180215_0018.py
new file mode 100644
index 0000000000000000000000000000000000000000..9cd65ce00b95c767f3bf9db33128446d83b79ad2
--- /dev/null
+++ b/src/stats/migrations/0007_auto_20180215_0018.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.0.1 on 2018-02-14 23:18
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('stats', '0006_auto_20180214_2239'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='event',
+            name='visitors',
+            field=models.ManyToManyField(related_name='visitor', to='account.Profile'),
+        ),
+    ]
diff --git a/src/stats/migrations/0008_note.py b/src/stats/migrations/0008_note.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b08926a7916ef37a514309d69c0f9b3ac8779c0
--- /dev/null
+++ b/src/stats/migrations/0008_note.py
@@ -0,0 +1,27 @@
+# Generated by Django 2.0.1 on 2018-02-21 00:18
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('account', '0017_auto_20180205_2004'),
+        ('stats', '0007_auto_20180215_0018'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Note',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('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', to='stats.Event')),
+                ('user', models.ForeignKey(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 b3cea98f8d0779a9f8b033e69beb89750e7b3d79..aa38fd947c9ec32fd41c407f52387c1c683779b7 100644
--- a/src/stats/models.py
+++ b/src/stats/models.py
@@ -4,10 +4,27 @@ from django.utils import timezone
 from django.core.exceptions import ValidationError
 
 
-class KszkEvent(models.Model):
+class Event(models.Model):
+    name = models.CharField(max_length=255)
     date = models.DateTimeField(null=False)
     visitors = models.ManyToManyField(Profile, related_name='visitor')
 
     def clean(self):
         if self.date > timezone.now():
             raise ValidationError('Invalid date')
+
+    def __str__(self):
+        return self.name
+
+
+class Note(models.Model):
+    event = models.ForeignKey(Event, related_name='notes', on_delete=models.CASCADE)
+    user = models.ForeignKey(Profile, related_name='notes', on_delete=models.CASCADE)
+    note = models.TextField()
+
+    created_by = models.ForeignKey(Profile, related_name='created_notes', on_delete=models.CASCADE)
+    created_at = models.DateTimeField(auto_now_add=True, editable=False)
+    updated_at = models.DateTimeField(auto_now=True, editable=False)
+
+    def __str__(self):
+        return self.note
diff --git a/src/stats/resources.py b/src/stats/resources.py
new file mode 100644
index 0000000000000000000000000000000000000000..712c971ae27eb0f4bebfd30be07eb952d8c5fbb7
--- /dev/null
+++ b/src/stats/resources.py
@@ -0,0 +1,41 @@
+from import_export import resources, widgets, fields
+
+from account.models import Profile
+from . import models
+
+
+class EventResource(resources.ModelResource):
+    visitors = fields.Field(
+        attribute='visitors',
+        widget=widgets.ManyToManyWidget(model=Profile, separator=' ,', field='full_name'),
+    )
+
+    class Meta:
+        model = models.Event
+        fields = (
+            'name',
+            'date',
+            'visitors',
+        )
+
+
+class NoteResource(resources.ModelResource):
+    created_by = fields.Field()
+    user = fields.Field()
+
+    class Meta:
+        model = models.Note
+        fields = (
+            'user',
+            'event__name',
+            'note',
+            'created_at',
+            'updated_at',
+            'created_by',
+        )
+
+    def dehydrate_created_by(self, obj):
+        return obj.created_by.full_name
+
+    def dehydrate_user(self, obj):
+        return obj.user.full_name
diff --git a/src/stats/serializers.py b/src/stats/serializers.py
index 83569981c7ddc3d22fa64e94970bd98dddb71b85..0620c993155de89cea2f2c9e463d00737248b803 100644
--- a/src/stats/serializers.py
+++ b/src/stats/serializers.py
@@ -2,7 +2,7 @@ from rest_framework import serializers
 from . import models
 
 
-class KszkEventSerializer(serializers.ModelSerializer):
+class EventSerializer(serializers.ModelSerializer):
     class Meta:
-        model = models.KszkEvent
-        fields = ('date',  'visitors')
+        model = models.Event
+        fields = ('name', 'date', 'visitors')
diff --git a/src/stats/urls.py b/src/stats/urls.py
index ef0f4e2166c58ea7ceea950825e171cae29f6807..8f270ce8246724e9a29aaf99dd3d1e7d6690aec7 100644
--- a/src/stats/urls.py
+++ b/src/stats/urls.py
@@ -3,6 +3,6 @@ from rest_framework import routers
 from . import views
 
 router = routers.DefaultRouter()
-router.register(r'events', views.KszkEventViewSet)
+router.register(r'events', views.EventViewSet)
 
 urlpatterns = router.urls
diff --git a/src/stats/views.py b/src/stats/views.py
index c7ed3ecdf5621171f68cd8dcacc07621296b77c1..f2c91f1e70a8b38d620a0a500709f38f97359d9c 100644
--- a/src/stats/views.py
+++ b/src/stats/views.py
@@ -4,6 +4,6 @@ from . import models
 from . import serializers
 
 
-class KszkEventViewSet(viewsets.ModelViewSet):
-    serializer_class = serializers.KszkEventSerializer
-    queryset = models.KszkEvent.objects.all()
+class EventViewSet(viewsets.ModelViewSet):
+    serializer_class = serializers.EventSerializer
+    queryset = models.Event.objects.all()