diff --git a/aleksis/apps/kolego/frontend/components/AbsenceReasonChip.vue b/aleksis/apps/kolego/frontend/components/AbsenceReasonChip.vue
index 7e7dff5de475d87d0734ca64fa3631df3deae686..f3521b1b8ce1149d531ebbb8423cc464be7f8615 100644
--- a/aleksis/apps/kolego/frontend/components/AbsenceReasonChip.vue
+++ b/aleksis/apps/kolego/frontend/components/AbsenceReasonChip.vue
@@ -3,6 +3,7 @@ import CounterChip from "aleksis.core/components/generic/chips/CounterChip.vue";
 
 export default {
   name: "AbsenceReasonChip",
+  components: [CounterChip],
   props: {
     absenceReason: {
       type: Object,
diff --git a/aleksis/apps/kolego/frontend/components/AbsenceReasonGroupSelect.vue b/aleksis/apps/kolego/frontend/components/AbsenceReasonGroupSelect.vue
index 2151a35178ff4d13de1b897cfa10c16ecb7fac27..d7bf38f19c00aa6f7da7c5be4c76dd68fc89b347 100644
--- a/aleksis/apps/kolego/frontend/components/AbsenceReasonGroupSelect.vue
+++ b/aleksis/apps/kolego/frontend/components/AbsenceReasonGroupSelect.vue
@@ -10,6 +10,7 @@ export default {
   data() {
     return {
       absenceReasons: [],
+      innerValue: undefined,
     };
   },
   apollo: {
@@ -52,14 +53,28 @@ export default {
       );
     },
   },
+  mounted() {
+    this.innerValue = this.value;
+  },
+  watch: {
+    value(newValue) {
+      this.innerValue = newValue;
+    },
+  },
+  methods: {
+    updateInnerValue($event) {
+      this.innerValue = $event;
+      this.$emit("input", $event);
+    },
+  },
 };
 </script>
 
 <template>
   <v-chip-group
     column
-    :value="value"
-    @change="$emit('input', $event)"
+    :value="innerValue"
+    @change="updateInnerValue"
     mandatory
     v-if="showChips"
   >
@@ -71,7 +86,7 @@ export default {
       outlined
     >
       {{ $t("kolego.absence_reason.present") }}
-      <v-avatar right v-if="loadSelectedChip && value === emptyValue">
+      <v-avatar right v-if="loadSelectedChip && innerValue === emptyValue">
         <v-progress-circular indeterminate :size="16" :width="2" />
       </v-avatar>
     </v-chip>
@@ -81,7 +96,7 @@ export default {
       :absence-reason="absenceReason"
       filter
       outlined
-      :loading="loadSelectedChip && absenceReason.id === value"
+      :loading="loadSelectedChip && absenceReason.id === innerValue"
     />
   </v-chip-group>
   <v-skeleton-loader v-else type="chip@4" class="d-flex flex-wrap gap" />
diff --git a/aleksis/apps/kolego/schema/absence.py b/aleksis/apps/kolego/schema/absence.py
index 6880d305027374339696627b2b5418c0a18a673d..752cd458103132b8f7aef8cc727d97d381107e66 100644
--- a/aleksis/apps/kolego/schema/absence.py
+++ b/aleksis/apps/kolego/schema/absence.py
@@ -3,17 +3,14 @@ from datetime import timezone
 from django.conf import settings
 
 from graphene_django.types import DjangoObjectType
-from graphene_django_cud.mutations import (
-    DjangoBatchCreateMutation,
-    DjangoBatchDeleteMutation,
-    DjangoBatchPatchMutation,
-)
 from guardian.shortcuts import get_objects_for_user
 from zoneinfo import ZoneInfo
 
 from aleksis.core.schema.base import (
+    BaseBatchCreateMutation,
+    BaseBatchDeleteMutation,
+    BaseBatchPatchMutation,
     DjangoFilterMixin,
-    PermissionBatchPatchMixin,
     PermissionsTypeMixin,
 )
 
@@ -48,7 +45,7 @@ class AbsenceType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType):
         return get_objects_for_user(info.context.user, "kolego.view_absence", queryset)
 
 
-class AbsenceBatchCreateMutation(DjangoBatchCreateMutation):
+class AbsenceBatchCreateMutation(BaseBatchCreateMutation):
     class Meta:
         model = Absence
         fields = ("person", "reason", "comment", "datetime_start", "datetime_end")
@@ -72,13 +69,13 @@ class AbsenceBatchCreateMutation(DjangoBatchCreateMutation):
         return obj
 
 
-class AbsenceBatchDeleteMutation(DjangoBatchDeleteMutation):
+class AbsenceBatchDeleteMutation(BaseBatchDeleteMutation):
     class Meta:
         model = Absence
-        permission_required = "kolego.delete_absence_rule"
+        permissions = ("kolego.delete_absence_rule",)
 
 
-class AbsenceBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation):
+class AbsenceBatchPatchMutation(BaseBatchPatchMutation):
     class Meta:
         model = Absence
         fields = ("id", "person", "reason", "comment", "datetime_start", "datetime_end")
@@ -101,7 +98,7 @@ class AbsenceBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutat
         return obj
 
 
-class AbsenceReasonBatchCreateMutation(DjangoBatchCreateMutation):
+class AbsenceReasonBatchCreateMutation(BaseBatchCreateMutation):
     class Meta:
         model = AbsenceReason
         fields = ("short_name", "name", "colour", "default")
@@ -109,13 +106,13 @@ class AbsenceReasonBatchCreateMutation(DjangoBatchCreateMutation):
         permissions = ("kolego.create_absencereason_rule",)
 
 
-class AbsenceReasonBatchDeleteMutation(DjangoBatchDeleteMutation):
+class AbsenceReasonBatchDeleteMutation(BaseBatchDeleteMutation):
     class Meta:
         model = AbsenceReason
-        permission_required = "kolego.delete_absencereason_rule"
+        permissions = ("kolego.delete_absencereason_rule",)
 
 
-class AbsenceReasonBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation):
+class AbsenceReasonBatchPatchMutation(BaseBatchPatchMutation):
     class Meta:
         model = AbsenceReason
         fields = ("id", "short_name", "name", "colour", "default")