diff --git a/program/management/commands/addpermissions.py b/program/management/commands/addpermissions.py
index 13f2e2aca24fe70aa37688d8cedb870cb846ef70..efc345f864e250d31022590fd28ea6a170b40f2d 100644
--- a/program/management/commands/addpermissions.py
+++ b/program/management/commands/addpermissions.py
@@ -1,7 +1,48 @@
 from django.conf import settings
 from django.contrib.auth.models import Group, Permission
 from django.core.management.base import BaseCommand
-from django.db.models import QuerySet
+from django.db.models import Q, QuerySet
+
+PERMISSIONS = {
+    settings.PRIVILEGED_GROUP: {
+        "app": Permission.objects.filter(
+            ~Q(codename__startswith="edit"),
+            content_type__app_label="program",
+        ),
+        "custom_add": Permission.objects.filter(
+            codename__startswith="add__",
+            content_type__model="playlist",
+        ),
+        "custom_display": Permission.objects.filter(codename="display__show__internal_note"),
+        "custom_update": Permission.objects.filter(
+            codename__startswith="update",
+            content_type__model__in=["host", "note", "show"],
+        ),
+    },
+    settings.ENTITLED_GROUPS[0]: {
+        "default_note_notelink": Permission.objects.filter(
+            ~Q(codename__startswith="create"),
+            ~Q(codename__startswith="edit"),
+            ~Q(codename__startswith="update"),
+            content_type__model__in=["note", "notelink"],
+        ),
+    },
+    settings.ENTITLED_GROUPS[1]: {
+        "extra_change": Permission.objects.filter(
+            codename__startswith="change",
+            content_type__model__in=["host", "note", "show"],
+        ),
+        "custom_add": Permission.objects.filter(
+            ~Q(codename__startswith="add__m3ufile"),
+            codename__startswith="add__",
+            content_type__model="playlist",
+        ),
+        "custom_edit": Permission.objects.filter(
+            codename__startswith="edit",
+            content_type__model__in=["host", "note", "show"],
+        ),
+    },
+}
 
 
 class Command(BaseCommand):
@@ -14,46 +55,8 @@ class Command(BaseCommand):
         self.stdout.write(self.style.SUCCESS(str(len(permissions))))
 
     def handle(self, *args, **options):
-        privileged_group = Group.objects.get(name=settings.PRIVILEGED_GROUP)
-        host_group = Group.objects.get(name=settings.ENTITLED_GROUPS[0])
-        host_plus_group = Group.objects.get(name=settings.ENTITLED_GROUPS[1])
+        for group_name in PERMISSIONS:
+            group = Group.objects.get(name=group_name)
 
-        app_permissions = Permission.objects.filter(content_type__app_label="program").exclude(
-            codename__startswith="edit"
-        )
-        default_model_permissions = (
-            Permission.objects.filter(content_type__model__in=["note", "notelink"])
-            .exclude(codename__startswith="edit")
-            .exclude(codename__startswith="create")
-            .exclude(codename__startswith="update")
-        )
-        change_permissions = Permission.objects.filter(
-            codename__startswith="change", content_type__model__in=["host", "note", "show"]
-        )
-        edit_permissions = Permission.objects.filter(
-            codename__startswith="edit", content_type__model__in=["host", "note", "show"]
-        )
-        create_permissions = Permission.objects.filter(
-            codename__startswith="create", content_type__model__in=["note"]
-        )
-        update_permissions = Permission.objects.filter(
-            codename__startswith="update", content_type__model__in=["host", "note", "show"]
-        )
-        custom_add_permissions = Permission.objects.filter(
-            codename__startswith="add__", content_type__model="playlist"
-        )
-
-        self.add_permissions(privileged_group, app_permissions, "default app level")
-        self.add_permissions(privileged_group, edit_permissions, "custom edit field")
-        self.add_permissions(privileged_group, create_permissions, "custom create")
-        self.add_permissions(privileged_group, update_permissions, "custom update")
-        self.add_permissions(privileged_group, custom_add_permissions, "custom add")
-
-        self.add_permissions(host_group, default_model_permissions, "default model")
-
-        self.add_permissions(host_plus_group, change_permissions, "default change")
-        self.add_permissions(host_plus_group, edit_permissions, "custom edit field")
-
-        self.add_permissions(
-            host_plus_group, custom_add_permissions.exclude(codename="add__m3ufile"), "custom add"
-        )
+            for name, permissions in PERMISSIONS[group_name].items():
+                self.add_permissions(group, permissions, name)