diff --git a/bigbluebutton/django/migrations/0002_auto_20201009_1437.py b/bigbluebutton/django/migrations/0002_auto_20201009_1437.py
new file mode 100644
index 0000000000000000000000000000000000000000..762a877d776b3a444e76c4505f93de5458e62014
--- /dev/null
+++ b/bigbluebutton/django/migrations/0002_auto_20201009_1437.py
@@ -0,0 +1,110 @@
+# Generated by Django 3.1.2 on 2020-10-09 14:37
+
+import django.contrib.sites.models
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sites', '0002_alter_domain_unique'),
+        ('bigbluebutton', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='bigbluebuttongroup',
+            options={'permissions': [('add_servers', 'Can add servers to this group'), ('add_apitokens', 'Can add API tokens valid for this group'), ('add_meetings', 'Can add meetings on servers in this group')]},
+        ),
+        migrations.AlterModelOptions(
+            name='meeting',
+            options={'permissions': [('join_as_attendee', 'Can join this meeting with viewer role'), ('join_as_moderator', 'Can join this meeting with moderator role'), ('grant_attendee', 'Can grant attendee privileges to others'), ('grant_moderator', 'Can grant moderator privileges to others'), ('enforce_conference_pin', 'Can enforce a static conference PIN'), ('add_urls', 'Can add new URLs for this meeting')]},
+        ),
+        migrations.RemoveField(
+            model_name='meeting',
+            name='api',
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='allow_mods_to_unmute_users',
+            field=models.BooleanField(default=False, help_text='Allow moderators to unmute other users (this is a privacy risk)', verbose_name='Allow moderators to unmute'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='allow_start_stop_recording',
+            field=models.BooleanField(default=True, help_text='Allows users to manually start and stop recording. If recording is set to auto-start, this forces the whole meeting to be recorded. If auto-start is disabled, this causes the recording to be discarded.', verbose_name='Allow starting and stopping recording'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='api_group',
+            field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='meetings', to='bigbluebutton.bigbluebuttongroup'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='auto_start_recording',
+            field=models.BooleanField(default=False, verbose_name='Auto-start recording on first join'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='conference_pin',
+            field=models.CharField(blank=True, help_text='PIN for phone dial-in (if available)', max_length=10, null=True, unique=True, validators=[django.core.validators.RegexValidator('[0-9]*', 'The PIN must be numerical')], verbose_name='Conference PIN'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='duration',
+            field=models.PositiveIntegerField(null=True, verbose_name='Maximum duration (in minutes)'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='enable_cam',
+            field=models.BooleanField(default=True, verbose_name='Allow sharing webcam'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='enable_mic',
+            field=models.BooleanField(default=True, verbose_name='Allow sharing microphone'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='enable_note',
+            field=models.BooleanField(default=True, verbose_name='Allow editing shared notes'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='enable_private_chat',
+            field=models.BooleanField(default=True, verbose_name='Allow private chat'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='enable_public_chat',
+            field=models.BooleanField(default=True, verbose_name='Allow public chat'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='mute_on_start',
+            field=models.BooleanField(default=False, help_text='Participants are muted when they join the meeting', verbose_name='Mute on start'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='record',
+            field=models.BooleanField(default=False, verbose_name='Record media and events'),
+        ),
+        migrations.AddField(
+            model_name='meeting',
+            name='webcams_only_for_moderator',
+            field=models.BooleanField(default=False, help_text='Webcam streams of participants are only visible for moderators, not for other participants.', verbose_name='Webcams only for moderators'),
+        ),
+        migrations.AlterField(
+            model_name='bigbluebuttongroup',
+            name='site',
+            field=models.ForeignKey(default=django.contrib.sites.models.SiteManager.get_current, on_delete=django.db.models.deletion.CASCADE, to='sites.site'),
+        ),
+        migrations.AlterField(
+            model_name='meeting',
+            name='max_participants',
+            field=models.PositiveSmallIntegerField(null=True, verbose_name='Maximum number of participants'),
+        ),
+    ]
diff --git a/poetry.lock b/poetry.lock
index df3de9d9f89e4a8f4f992ac2841653ec1794abfc..9b4e9e87b899d08696fbdacf538e98fb05b5467a 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -417,7 +417,7 @@ description = "A Python utility / library to sort Python imports."
 name = "isort"
 optional = false
 python-versions = ">=3.6,<4.0"
-version = "5.5.4"
+version = "5.6.1"
 
 [package.extras]
 colors = ["colorama (>=0.4.3,<0.5.0)"]
@@ -959,7 +959,7 @@ description = "A non-validating SQL parser."
 name = "sqlparse"
 optional = true
 python-versions = ">=3.5"
-version = "0.4.0"
+version = "0.4.1"
 
 [[package]]
 category = "dev"
@@ -1001,7 +1001,7 @@ description = "A collection of helpers and mock objects for unit tests and doc t
 name = "testfixtures"
 optional = false
 python-versions = "*"
-version = "6.14.2"
+version = "6.15.0"
 
 [package.extras]
 build = ["setuptools-git", "wheel", "twine"]
@@ -1270,8 +1270,8 @@ iniconfig = [
     {file = "iniconfig-1.0.1.tar.gz", hash = "sha256:e5f92f89355a67de0595932a6c6c02ab4afddc6fcdc0bfc5becd0d60884d3f69"},
 ]
 isort = [
-    {file = "isort-5.5.4-py3-none-any.whl", hash = "sha256:36f0c6659b9000597e92618d05b72d4181104cf59472b1c6a039e3783f930c95"},
-    {file = "isort-5.5.4.tar.gz", hash = "sha256:ba040c24d20aa302f78f4747df549573ae1eaf8e1084269199154da9c483f07f"},
+    {file = "isort-5.6.1-py3-none-any.whl", hash = "sha256:dd3211f513f4a92ec1ec1876fc1dc3c686649c349d49523f5b5adbb0814e5960"},
+    {file = "isort-5.6.1.tar.gz", hash = "sha256:2f510f34ae18a8d0958c53eec51ef84fd099f07c4c639676525acbcd7b5bd3ff"},
 ]
 jinja2 = [
     {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"},
@@ -1612,8 +1612,8 @@ sphinxcontrib-serializinghtml = [
     {file = "sphinxcontrib_serializinghtml-1.1.4-py2.py3-none-any.whl", hash = "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"},
 ]
 sqlparse = [
-    {file = "sqlparse-0.4.0-py3-none-any.whl", hash = "sha256:0523026398aea9c8b5f7a4a6d5c0829c285b4fbd960c17b5967a369342e21e01"},
-    {file = "sqlparse-0.4.0.tar.gz", hash = "sha256:d59e473424ae7470778fa4dd0dd7bb666ff324f0a6106c29deb5946ea5367f04"},
+    {file = "sqlparse-0.4.1-py3-none-any.whl", hash = "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0"},
+    {file = "sqlparse-0.4.1.tar.gz", hash = "sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8"},
 ]
 stevedore = [
     {file = "stevedore-3.2.2-py3-none-any.whl", hash = "sha256:5e1ab03eaae06ef6ce23859402de785f08d97780ed774948ef16c4652c41bc62"},
@@ -1627,8 +1627,8 @@ termcolor = [
     {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"},
 ]
 testfixtures = [
-    {file = "testfixtures-6.14.2-py2.py3-none-any.whl", hash = "sha256:816557888877f498081c1b5c572049b4a2ddffedb77401308ff4cdc1bb9147b7"},
-    {file = "testfixtures-6.14.2.tar.gz", hash = "sha256:14d9907390f5f9c7189b3d511b64f34f1072d07cc13b604a57e1bb79029376e3"},
+    {file = "testfixtures-6.15.0-py2.py3-none-any.whl", hash = "sha256:e17f4f526fc90b0ac9bc7f8ca62b7dec17d9faf3d721f56bda4f0fd94d02f85a"},
+    {file = "testfixtures-6.15.0.tar.gz", hash = "sha256:409f77cfbdad822d12a8ce5c4aa8fb4d0bb38073f4a5444fede3702716a2cec2"},
 ]
 toml = [
     {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"},
diff --git a/pyproject.toml b/pyproject.toml
index 6787f56a019027ac951fe856b9b34dd5fdc8f651..e9195e955645087f32de02ea07135995e7e38bd6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "bigbluebutton2"
-version = "0.1a3"
+version = "0.1a4"
 description = "Sophisticated Python client library for BigBlueButtonâ„¢ with Django integration"
 authors = ["Dominik George <dominik.george@teckids.org>", "Tom Teichler <tom.teichler@teckids.org"]
 license = "MIT"