diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index cb1eb4f1926573367ae3bc543895b05b63859d79..e84fcd3a8eaab2cfb5f956536fee97ebe837e1f1 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -27,6 +27,7 @@ Fixed
 * Recurring events without until value weren't shown.
 * It wasn't possible to change icons of OAuth applications in the frontend.
 * First fetching of calendar feeds logged an error to console.
+* [Dev] Dialog-Object-Form's internal dialog-mode-handling did not implement opening via activator slot.
 
 `4.0`_ - 2025-03-29
 -------------------
diff --git a/aleksis/core/frontend/components/generic/dialogs/DialogObjectForm.vue b/aleksis/core/frontend/components/generic/dialogs/DialogObjectForm.vue
index fc803b0eaeec014599e978ae1f5beb606efd375e..4ed7c31f9cd7b4cd13f9871cfa811d0a8191fc4d 100644
--- a/aleksis/core/frontend/components/generic/dialogs/DialogObjectForm.vue
+++ b/aleksis/core/frontend/components/generic/dialogs/DialogObjectForm.vue
@@ -1,6 +1,6 @@
 <template>
   <mobile-fullscreen-dialog
-    v-model="dialog"
+    v-model="dialogMode"
     max-width="555px"
     :close-button="false"
   >
@@ -26,7 +26,7 @@
         :valid.sync="valid"
         @loading="handleLoading"
         @save="handleSave"
-        @cancel="dialog = false"
+        @cancel="dialogMode = false"
       >
         <template v-for="(_, slot) of $scopedSlots" #[slot]="scope"
           ><slot :name="slot" v-bind="scope"
@@ -35,7 +35,7 @@
     </template>
 
     <template #actions>
-      <cancel-button @click="dialog = false" :disabled="loading" />
+      <cancel-button @click="dialogMode = false" :disabled="loading" />
       <save-button
         @click="$refs.form.submit()"
         :loading="loading"
@@ -67,22 +67,9 @@ export default {
   },
   mixins: [openableDialogMixin, objectFormPropsMixin, loadingMixin],
   emits: ["cancel", "save"],
-  computed: {
-    dialog: {
-      get() {
-        return this.value;
-      },
-      set(newValue) {
-        this.$emit("input", newValue);
-      },
-    },
-  },
   methods: {
-    close() {
-      this.dialog = false;
-    },
     handleSave(items) {
-      this.dialog = false;
+      this.dialogMode = false;
       this.$emit("save", items);
     },
   },
diff --git a/aleksis/core/frontend/mixins/objectFormMixin.js b/aleksis/core/frontend/mixins/objectFormMixin.js
index ffc62d476dd1f19db08539989d75fa952c44c587..6797590d23f678da63fe456528c7ccce85443e5b 100644
--- a/aleksis/core/frontend/mixins/objectFormMixin.js
+++ b/aleksis/core/frontend/mixins/objectFormMixin.js
@@ -47,7 +47,6 @@ export default {
       this.$emit("cancel");
     },
     handleSuccess() {
-      this.dialog = false;
       let snackbarTextKey = this.isCreate
         ? this.createSuccessMessageI18nKey
         : this.editSuccessMessageI18nKey;
diff --git a/aleksis/core/frontend/mixins/openableDialogMixin.js b/aleksis/core/frontend/mixins/openableDialogMixin.js
index d96f62f58e3d91a9ad8ecea714adb655f3b8e4d7..901e7f8142b9ad8be312cbd49e9d72ed85e603e8 100644
--- a/aleksis/core/frontend/mixins/openableDialogMixin.js
+++ b/aleksis/core/frontend/mixins/openableDialogMixin.js
@@ -1,7 +1,7 @@
 export default {
   props: {
     /**
-     * Dialog state (open or closed)
+     * Dialog-mode (open or closed)
      * @model
      * @values true,false
      */
@@ -11,4 +11,25 @@ export default {
     },
   },
   emits: ["input"],
+  data() {
+    return {
+      internalDialogMode: this.value,
+    };
+  },
+  computed: {
+    dialogMode: {
+      get() {
+        return this.internalDialogMode;
+      },
+      set(newValue) {
+        this.internalDialogMode = newValue;
+        this.$emit("input", newValue);
+      },
+    },
+  },
+  mounted() {
+    this.$watch("value", (newVal) => {
+      this.dialogMode = newVal;
+    });
+  },
 };