diff --git a/aleksis/core/migrations/0021_group_types.py b/aleksis/core/migrations/0021_group_types.py
new file mode 100644
index 0000000000000000000000000000000000000000..290d08e1dd35f1c32a22bad2dd2f170c2e835363
--- /dev/null
+++ b/aleksis/core/migrations/0021_group_types.py
@@ -0,0 +1,33 @@
+# Generated by Django 3.0.5 on 2020-04-13 13:44
+
+import django.contrib.postgres.fields.jsonb
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0020_incease_length_of_fields'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='GroupType',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', django.contrib.postgres.fields.jsonb.JSONField(default=dict, editable=False)),
+                ('name', models.CharField(max_length=50, verbose_name='Title of type')),
+                ('description', models.CharField(max_length=500, verbose_name='Description')),
+            ],
+            options={
+                'verbose_name': 'Group type',
+                'verbose_name_plural': 'Group types',
+            },
+        ),
+        migrations.AddField(
+            model_name='group',
+            name='type',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='type', to='core.GroupType', verbose_name='Type of group'),
+        ),
+    ]
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 9d6e45d935394eb00dcdedf9213966203f1d981f..62c69c657022a727a1b8a07498e212455d0ce4e9 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -237,6 +237,8 @@ class Group(ExtensibleModel):
         blank=True,
     )
 
+    type = models.ForeignKey("GroupType", on_delete=models.CASCADE, related_name="type", verbose_name=_("Type of group"), null=True, blank=True)
+
     @property
     def announcement_recipients(self):
         return list(self.members.all()) + list(self.owners.all())
@@ -510,3 +512,11 @@ class CustomMenuItem(ExtensibleModel):
     class Meta:
         verbose_name = _("Custom menu item")
         verbose_name_plural = _("Custom menu items")
+
+class GroupType(ExtensibleModel):
+    name = models.CharField(verbose_name=_("Title of type"), max_length=50)
+    description = models.CharField(verbose_name=_("Description"), max_length=500)
+
+    class Meta:
+        verbose_name = _("Group type")
+        verbose_name_plural = _("Group types")