diff --git a/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java b/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java
index 357ea9a04e..12f431c10e 100644
--- a/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java
+++ b/core/src/main/java/se/su/dsv/scipro/grading/GradingReportTemplateUpdate.java
@@ -36,12 +36,19 @@ public record GradingReportTemplateUpdate(
         }
     }
 
-    public record Criteria(LocalizedString title, @Nullable Flag flag, List<Requirement> requirements)
+    public record Criteria(
+            LocalizedString title,
+            Type type,
+            int minimumPointsRequiredToPass,
+            @Nullable Flag flag,
+            List<Requirement> requirements)
     {
+        public enum Type {THESIS, INDIVIDUAL}
         public enum Flag {OPPOSITION, REFLECTION}
 
         public Criteria {
             Objects.requireNonNull(title, "Title must not be null");
+            Objects.requireNonNull(type, "Type must not be null");
             Objects.requireNonNull(requirements, "Requirements must not be null");
         }
 
diff --git a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java
index 0bd1da6bfb..d6eaf522a0 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplate.java
@@ -25,7 +25,7 @@ public class GradingReportTemplate extends DomainObject {
     @OneToOne(optional = false)
     private ProjectType projectType;
 
-    @OneToMany(mappedBy = "gradingReportTemplate", cascade = {CascadeType.ALL})
+    @OneToMany(mappedBy = "gradingReportTemplate", cascade = {CascadeType.ALL}, orphanRemoval = true)
     private Collection<GradingCriterionTemplate> criteria = new HashSet<>();
 
     @Temporal(TemporalType.DATE)
diff --git a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java
index 6da82c20d6..eaa91cf59b 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/GradingReportTemplateRepoImpl.java
@@ -65,6 +65,40 @@ public class GradingReportTemplateRepoImpl extends GenericRepo<GradingReportTemp
     @Transactional
     public GradingReportTemplate updateTemplate(long templateId, GradingReportTemplateUpdate update) {
         GradingReportTemplate gradingReportTemplate = findOne(templateId);
-        return gradingReportTemplate;
+        gradingReportTemplate.setValidFrom(update.validFrom());
+
+        gradingReportTemplate.getCriteria().clear();
+        for (var criteria : update.criteria()) {
+            final List<GradingCriterionPointTemplate> pointTemplates = criteria.requirements()
+                    .stream()
+                    .map(this::toPointTemplate)
+                    .toList();
+            switch (criteria.type()) {
+                case THESIS -> {
+                    gradingReportTemplate.addProjectCriterion(
+                            criteria.title().swedish(),
+                            criteria.title().english(),
+                            criteria.minimumPointsRequiredToPass(),
+                            pointTemplates);
+                }
+                case INDIVIDUAL -> {
+                    gradingReportTemplate.addIndividualCriterion(
+                            criteria.title().swedish(),
+                            criteria.title().english(),
+                            criteria.minimumPointsRequiredToPass(),
+                            pointTemplates);
+                }
+            }
+        }
+
+        return save(gradingReportTemplate);
+    }
+
+    private GradingCriterionPointTemplate toPointTemplate(GradingReportTemplateUpdate.Criteria.Requirement requirement) {
+        return new GradingCriterionPointTemplate.Builder()
+                .point(requirement.points())
+                .description(requirement.description().swedish())
+                .descriptionEn(requirement.description().english())
+                .build();
     }
 }
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java
index d9ab2a9ab7..bd8f8e65d4 100644
--- a/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java
+++ b/view/src/main/java/se/su/dsv/scipro/admin/pages/grading/AdminGradingTemplateEditPage.java
@@ -97,6 +97,11 @@ public class AdminGradingTemplateEditPage extends AbstractAdminProjectPage imple
         }
         return new GradingReportTemplateUpdate.Criteria(
                 new LocalizedString(criteria.getTitleEn(), criteria.getTitleSv()),
+                switch (criteria.getType()) {
+                    case PROJECT -> GradingReportTemplateUpdate.Criteria.Type.THESIS;
+                    case INDIVIDUAL -> GradingReportTemplateUpdate.Criteria.Type.INDIVIDUAL;
+                },
+                criteria.getPointsRequiredToPass(),
                 getFlag(criteria),
                 requirements);
     }