diff --git a/resources/vue/components/courseware/layouts/CoursewareDateInput.vue b/resources/vue/components/courseware/layouts/CoursewareDateInput.vue
index 57a5619fbee207cf40021b276591a274d0a80bc4..773aa62fa1ed1e31c2bdb063674abae867de4f01 100644
--- a/resources/vue/components/courseware/layouts/CoursewareDateInput.vue
+++ b/resources/vue/components/courseware/layouts/CoursewareDateInput.vue
@@ -1,5 +1,5 @@
 <template>
-    <input :value="formattedDate" @input="onInput" type="date" />
+    <input :value="formattedDate" @input="onInput" type="date" :min="formattedMinDate" />
 </template>
 
 <script>
@@ -8,14 +8,18 @@ const toISO8601 = (date) => date.toISOString();
 const pad = (what, length = 2) => `00000000${what}`.substr(-length);
 
 export default {
-    props: ['value'],
+    props: ['value', 'min'],
     data: () => ({
         date: new Date(),
+        submissionDate: new Date()
     }),
     computed: {
         formattedDate() {
             return `${this.date.getFullYear()}-${pad(this.date.getMonth() + 1)}-${pad(this.date.getDate())}`;
         },
+        formattedMinDate() {
+            return `${this.submissionDate.getFullYear()}-${pad(this.submissionDate.getMonth() + 1)}-${pad(this.submissionDate.getDate())}`;
+        }
     },
     methods: {
         onInput({ target }) {
@@ -29,6 +33,9 @@ export default {
         if (this.value) {
             this.date = fromISO8601(this.value);
         }
+        if (this.min) {
+            this.submissionDate = fromISO8601(this.min);
+        }
     },
 };
 </script>
diff --git a/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue b/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue
index e17d18e60a4701d77f26ac69c0072fb5ee7e40e3..c75ab4b87f33a349d4c91702dbd2a969f8c4fc5a 100644
--- a/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue
+++ b/resources/vue/components/courseware/tasks/PagesTaskGroupsShow.vue
@@ -50,8 +50,8 @@
 
         <RenewalDialog
             v-if="renewalTask"
-            :renewalDate="renewalDate"
             :renewalState="renewalTask.attributes.renewal"
+            :submissionDate="renewalTask.attributes['submission-date']"
             @update="updateRenewal"
             @close="closeDialogs"
         />
diff --git a/resources/vue/components/courseware/tasks/RenewalDialog.vue b/resources/vue/components/courseware/tasks/RenewalDialog.vue
index f08719e22d2d13d17f059a13298545e0052334f5..671f1b9c96919eb719fc745f1331c8430a021333 100644
--- a/resources/vue/components/courseware/tasks/RenewalDialog.vue
+++ b/resources/vue/components/courseware/tasks/RenewalDialog.vue
@@ -24,7 +24,7 @@
                 </label>
                 <label v-if="state === 'granted'">
                     {{ $gettext('neue Frist') }}
-                    <DateInput v-model="date" class="size-l" />
+                    <DateInput v-model="date" class="size-l" :min="submissionDate" />
                 </label>
             </form>
         </template>
@@ -34,7 +34,7 @@
 <script>
 import DateInput from '../layouts/CoursewareDateInput.vue';
 export default {
-    props: ['renewalDate', 'renewalState'],
+    props: ['renewalState', 'submissionDate'],
     components: {
         DateInput,
     },
@@ -44,7 +44,7 @@ export default {
     }),
     methods: {
         resetLocalVars() {
-            this.date = this.renewalDate ?? null;
+            this.date = this.submissionDate ?? null;
             this.state = this.renewalState;
         },
         updateRenewal() {
@@ -64,7 +64,7 @@ export default {
         this.resetLocalVars();
     },
     watch: {
-        renewalDate(newValue) {
+        submissionDate(newValue) {
             if (newValue !== this.date) {
                 this.resetLocalVars();
             }