diff --git a/program/management/commands/addpermissions.py b/program/management/commands/addpermissions.py
index f4cb3a0ed0625b88b95202b384c1c1ec728877f5..db933a0a7f67aa828bdce618c756f7616632c0be 100644
--- a/program/management/commands/addpermissions.py
+++ b/program/management/commands/addpermissions.py
@@ -8,35 +8,37 @@ class Command(BaseCommand):
 
     def handle(self, *args, **options):
         program_group = Group.objects.get(name=settings.PRIVILEGED_GROUP)
-        program_permissions = Permission.objects.filter(content_type__app_label="program")
+        app_permissions = Permission.objects.filter(content_type__app_label="program").exclude(
+            codename__startswith="edit"
+        )
         self.stdout.write(
-            "  Adding program permissions to the privileged group... ",
+            "  Adding app permissions to the privileged group... ",
             ending="",
         )
         self.stdout.flush()
-        program_group.permissions.add(*program_permissions)
-        self.stdout.write(self.style.SUCCESS(len(program_permissions)))
+        program_group.permissions.add(*app_permissions)
+        self.stdout.write(self.style.SUCCESS(len(app_permissions)))
 
         broadcast_group = Group.objects.get(name=settings.ENTITLED_GROUPS[0])
-        note_notelink_permissions = Permission.objects.filter(
+        model_permissions = Permission.objects.filter(
             content_type__model__in=["note", "notelink"]
-        )
+        ).exclude(codename__startswith="edit")
         self.stdout.write(
-            "  Adding note & notelink permissions to the first entitled group... ",
+            "  Adding model permissions on note & notelink to the first entitled group... ",
             ending="",
         )
         self.stdout.flush()
-        broadcast_group.permissions.add(*note_notelink_permissions)
-        self.stdout.write(self.style.SUCCESS(len(note_notelink_permissions)))
+        broadcast_group.permissions.add(*model_permissions)
+        self.stdout.write(self.style.SUCCESS(len(model_permissions)))
 
         broadcast_plus_group = Group.objects.get(name=settings.ENTITLED_GROUPS[1])
-        change_host_show_permissions = Permission.objects.filter(
-            codename__startswith="change", content_type__model__in=["host", "show"]
+        edit_permissions = Permission.objects.filter(
+            codename__startswith="edit", content_type__model__in=["host", "note", "show"]
         )
         self.stdout.write(
-            "  Adding change host & show permissions to second the entitled group... ",
+            "  Adding edit permissions on host, note & show to the second entitled group... ",
             ending="",
         )
         self.stdout.flush()
-        broadcast_plus_group.permissions.add(*change_host_show_permissions)
-        self.stdout.write(self.style.SUCCESS(len(change_host_show_permissions)))
+        broadcast_plus_group.permissions.add(*edit_permissions)
+        self.stdout.write(self.style.SUCCESS(len(edit_permissions)))
diff --git a/program/migrations/0077_alter_host_options_alter_note_options_and_more.py b/program/migrations/0077_alter_host_options_alter_note_options_and_more.py
new file mode 100644
index 0000000000000000000000000000000000000000..26cfa948f31e24a95d777426c4d9f5476d763f9a
--- /dev/null
+++ b/program/migrations/0077_alter_host_options_alter_note_options_and_more.py
@@ -0,0 +1,43 @@
+# Generated by Django 4.2.6 on 2023-12-13 21:47
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("program", "0076_add_permissions_and_groups"),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name="host",
+            options={
+                "ordering": ("name",),
+                "permissions": [
+                    ("edit__host__biography", "Can edit Host biography field"),
+                    ("edit__host__name", "Can edit Host name field"),
+                ],
+            },
+        ),
+        migrations.AlterModelOptions(
+            name="note",
+            options={
+                "ordering": ("timeslot",),
+                "permissions": [
+                    ("edit__note__language", "Can edit Note language field"),
+                    ("edit__note__topic", "Can edit Note topic field"),
+                ],
+            },
+        ),
+        migrations.AlterModelOptions(
+            name="show",
+            options={
+                "ordering": ("slug",),
+                "permissions": [
+                    ("edit__show__description", "Can edit Show description field"),
+                    ("edit__show__name", "Can edit Show name field"),
+                    ("edit__show__short_description", "Can edit Show short_description field"),
+                ],
+            },
+        ),
+    ]
diff --git a/program/models.py b/program/models.py
index aaf8e4d020834a57e6df5419bc3a6fbee209fbdb..eedc69feafd4fa2eae02fefeaf21e45ae0700201 100644
--- a/program/models.py
+++ b/program/models.py
@@ -174,10 +174,8 @@ class Host(models.Model):
     class Meta:
         ordering = ("name",)
         permissions = [
-            ("change_biography", "Can change biography"),
-            ("change_email", "Can change email"),
-            ("change_image", "Can change image"),
-            ("change_name", "Can change name"),
+            ("edit__host__biography", "Can edit Host biography field"),
+            ("edit__host__name", "Can edit Host name field"),
         ]
 
     def __str__(self):
@@ -258,12 +256,9 @@ class Show(models.Model):
     class Meta:
         ordering = ("slug",)
         permissions = [
-            ("change_description", "Can change description"),
-            ("change_email", "Can change email"),
-            ("change_image", "Can change image"),
-            ("change_logo", "Can change logo"),
-            ("change_name", "Can change name"),
-            ("change_short_description", "Can change short_description"),
+            ("edit__show__description", "Can edit Show description field"),
+            ("edit__show__name", "Can edit Show name field"),
+            ("edit__show__short_description", "Can edit Show short_description field"),
         ]
 
     def __str__(self):
@@ -456,6 +451,10 @@ class Note(models.Model):
 
     class Meta:
         ordering = ("timeslot",)
+        permissions = [
+            ("edit__note__language", "Can edit Note language field"),
+            ("edit__note__topic", "Can edit Note topic field"),
+        ]
 
     def __str__(self):
         return self.title