diff --git a/biscuit/core/forms.py b/biscuit/core/forms.py
index 1f2d6c6c3ed28d48133c4b0abbe9aaa0e5b92dba..b9429a86f22093d1c860a2ce921d4d4da8cc3117 100644
--- a/biscuit/core/forms.py
+++ b/biscuit/core/forms.py
@@ -71,9 +71,10 @@ class EditPersonForm(forms.ModelForm):
 class EditGroupForm(forms.ModelForm):
     class Meta:
         model = Group
-        fields = ['name', 'short_name', 'members', 'owners']
+        fields = ['name', 'short_name', 'members', 'owners', 'parent_groups']
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.fields['members'].queryset = Person.objects.all()
         self.fields['owners'].queryset = Person.objects.all()
+        self.fields['parent_groups'].queryset = Group.objects.all()
diff --git a/biscuit/core/migrations/0016_parent_groups.py b/biscuit/core/migrations/0016_parent_groups.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9067b2cbacd276e1f893d69315647b5108bb98b
--- /dev/null
+++ b/biscuit/core/migrations/0016_parent_groups.py
@@ -0,0 +1,18 @@
+# Generated by Django 2.2.4 on 2019-09-02 19:01
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0015_person_photo_crop'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='group',
+            name='parent_groups',
+            field=models.ManyToManyField(related_name='child_groups', to='core.Group', verbose_name='Parent groups'),
+        ),
+    ]
diff --git a/biscuit/core/models.py b/biscuit/core/models.py
index 12b97470bce6f6106d2b125c6f12f6054fc9a7d5..3ff9e31c32a2d777bcd5c0f6a0adfd9750ca6589 100644
--- a/biscuit/core/models.py
+++ b/biscuit/core/models.py
@@ -130,5 +130,8 @@ class Group(SchoolRelated):
     members = models.ManyToManyField('Person', related_name='member_of')
     owners = models.ManyToManyField('Person', related_name='owner_of')
 
+    parent_groups = models.ManyToManyField('self', related_name='child_groups',
+        symmetrical=False, verbose_name=_('Parent groups'))
+
     def __str__(self) -> str:
         return '%s (%s)' % (self.name, self.short_name)