diff --git a/core/src/main/java/se/su/dsv/scipro/DataInitializer.java b/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
index e76d6f3025..55ca42ee2d 100644
--- a/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
+++ b/core/src/main/java/se/su/dsv/scipro/DataInitializer.java
@@ -10,6 +10,7 @@ import se.su.dsv.scipro.milestones.service.MilestoneActivityTemplateService;
 import se.su.dsv.scipro.profiles.CurrentProfile;
 import se.su.dsv.scipro.profiles.Profiles;
 import se.su.dsv.scipro.project.Project;
+import se.su.dsv.scipro.report.AbstractGradingCriterion;
 import se.su.dsv.scipro.report.GradingCriterionPointTemplate;
 import se.su.dsv.scipro.report.GradingReportTemplate;
 import se.su.dsv.scipro.security.auth.roles.Roles;
@@ -403,7 +404,7 @@ public class DataInitializer implements Lifecycle {
                 .description("För 2 poäng krävs dessutom: att oppositionsrapporten ingående och välbalanserat beskriver styrkor och svagheter hos det utvärderade arbetet ur flera aspekter samt att den innehåller tydliga och välmotiverade förslag till förbättringar.")
                 .descriptionEn("For 2 points the following is also required: that the opposition report thoroughly and in a well-balanced way describes from numerous aspects the strengths and weaknesses of the evaluated thesis and that it offers clear and well-motivated suggestions for improvements.")
                 .build());
-        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, gradingCriterionPointTemplates);
+        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, gradingCriterionPointTemplates, AbstractGradingCriterion.Flag.OPPOSITION);
 
         gradingCriterionPointTemplates = initPointTemplates();
         gradingCriterionPointTemplates.add(new GradingCriterionPointTemplate.Builder()
@@ -632,7 +633,8 @@ public class DataInitializer implements Lifecycle {
                 .description("För 2 poäng krävs dessutom: att oppositionsrapporten ingående och välbalanserat beskriver styrkor och svagheter hos det utvärderade arbetet ur flera aspekter samt att den innehåller tydliga och välmotiverade förslag till förbättringar.")
                 .descriptionEn("For 2 points the following is also required: that the opposition report thoroughly and in a well-balanced way describes from numerous aspects the strengths and weaknesses of the evaluated thesis and that it offers clear and well-motivated suggestions for improvements.")
                 .build());
-        gradingReportTemplateMaster.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, gradingCriterionPointTemplates);
+        gradingReportTemplateMaster.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, gradingCriterionPointTemplates,
+                AbstractGradingCriterion.Flag.OPPOSITION);
 
         gradingCriterionPointTemplates = initPointTemplates();
         gradingCriterionPointTemplates.add(new GradingCriterionPointTemplate.Builder()
@@ -841,7 +843,8 @@ public class DataInitializer implements Lifecycle {
                 .description("För 2 poäng krävs dessutom: att oppositionsrapporten ingående och välbalanserat beskriver styrkor och svagheter hos det utvärderade arbetet ur flera aspekter samt att den innehåller tydliga och välmotiverade förslag till förbättringar.")
                 .descriptionEn("For 2 points the following is also required: that the opposition report thoroughly and in a well-balanced way describes from numerous aspects the strengths and weaknesses of the evaluated thesis and that it offers clear and well-motivated suggestions for improvements.")
                 .build());
-        gradingReportTemplateMagister.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, gradingCriterionPointTemplates);
+        gradingReportTemplateMagister.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, gradingCriterionPointTemplates,
+                AbstractGradingCriterion.Flag.OPPOSITION);
 
         gradingCriterionPointTemplates = initPointTemplates();
         gradingCriterionPointTemplates.add(new GradingCriterionPointTemplate.Builder()
diff --git a/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java
index 7c06a09631..e538f8cf14 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/GradingReportServiceImpl.java
@@ -23,8 +23,6 @@ import java.util.*;
 
 public class GradingReportServiceImpl implements GradingReportTemplateService, GradingReportService {
 
-    public static final String OPPOSITION_SWEDISH = "Ö1 Oppositionsrapport";
-    public static final String OPPOSITION_ENGLISH = "Ö1 Opposition report";
     private final EventBus eventBus;
     private final ThesisSubmissionHistoryService thesisSubmissionHistoryService;
     private final Clock clock;
@@ -52,7 +50,7 @@ public class GradingReportServiceImpl implements GradingReportTemplateService, G
     @Override
     public boolean updateOppositionCriteria(SupervisorGradingReport report, FinalSeminarOpposition opposition) {
         for (GradingCriterion gradingCriterion : report.getIndividualCriteria()) {
-            boolean isOppositionCriterion = gradingCriterion.getTitle().equals(OPPOSITION_SWEDISH) || gradingCriterion.getTitle().equals(OPPOSITION_ENGLISH);
+            boolean isOppositionCriterion = gradingCriterion.getFlag() == GradingCriterion.Flag.OPPOSITION;
             boolean betterGrade = gradingCriterion.getPoints() == null || opposition.getPoints() > gradingCriterion.getPoints();
             if (isOppositionCriterion && betterGrade) {
                 gradingCriterion.setFeedback(opposition.getFeedback());
diff --git a/core/src/main/resources/db/migration/V393__migrate_opposition_criteria_to_flag.sql b/core/src/main/resources/db/migration/V393__migrate_opposition_criteria_to_flag.sql
new file mode 100644
index 0000000000..d4ffffc008
--- /dev/null
+++ b/core/src/main/resources/db/migration/V393__migrate_opposition_criteria_to_flag.sql
@@ -0,0 +1,2 @@
+UPDATE `GradingCriterion` SET `flag` = 'OPPOSITION' WHERE title like 'Ö1 %';
+UPDATE `grading_criterion_template` SET `flag` = 'OPPOSITION' WHERE title like 'Ö1 %';
diff --git a/core/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java
index ee8222109f..765513cc4e 100644
--- a/core/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java
@@ -22,8 +22,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import static se.su.dsv.scipro.report.GradingReportServiceImpl.OPPOSITION_ENGLISH;
-import static se.su.dsv.scipro.report.GradingReportServiceImpl.OPPOSITION_SWEDISH;
 
 public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
 
@@ -83,7 +81,7 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
         addOppositionCriterion();
         boolean updated = updateOppositionCriterion();
 
-        GradingCriterion oppositionCriterion = findOppositionCriterion(OPPOSITION_SWEDISH);
+        GradingCriterion oppositionCriterion = findOppositionCriterion();
         assert oppositionCriterion != null;
         assertEquals(FEEDBACK_ON_OPPOSITION, oppositionCriterion.getFeedback());
         assertEquals((Integer) OPPOSITION_CRITERION_POINTS, oppositionCriterion.getPoints());
@@ -95,7 +93,7 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
         addOppositionCriterion();
         boolean updated = updateOppositionCriterion();
 
-        GradingCriterion oppositionCriterion = findEnglishOppositionCriterion(OPPOSITION_ENGLISH);
+        GradingCriterion oppositionCriterion = findEnglishOppositionCriterion("Ö1 Opposition report");
         assert oppositionCriterion != null;
         assertEquals(FEEDBACK_ON_OPPOSITION, oppositionCriterion.getFeedback());
         assertEquals((Integer) OPPOSITION_CRITERION_POINTS, oppositionCriterion.getPoints());
@@ -108,7 +106,7 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
         assessAllCriteria(gradingReport);
         boolean updated = updateOppositionCriterion();
 
-        GradingCriterion oppositionCriterion = findOppositionCriterion(OPPOSITION_SWEDISH);
+        GradingCriterion oppositionCriterion = findOppositionCriterion();
         assert oppositionCriterion != null;
         assertEquals(FEEDBACK, oppositionCriterion.getFeedback());
         assertEquals((Integer) oppositionCriterion.getMaxPoints(), oppositionCriterion.getPoints());
@@ -122,7 +120,7 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
         setPointsOnAllCriteria(gradingReport, 1);
         updateOppositionCriterion();
 
-        GradingCriterion oppositionCriterion = findOppositionCriterion(OPPOSITION_SWEDISH);
+        GradingCriterion oppositionCriterion = findOppositionCriterion();
         assert oppositionCriterion != null;
         assertEquals(FEEDBACK_ON_OPPOSITION, oppositionCriterion.getFeedback());
         assertEquals(OPPOSITION_CRITERION_POINTS, oppositionCriterion.getPoints());
@@ -135,7 +133,7 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
         setPointsOnAllCriteria(gradingReport, points);
         updateOppositionCriterion();
 
-        GradingCriterion oppositionCriterion = findOppositionCriterion(OPPOSITION_SWEDISH);
+        GradingCriterion oppositionCriterion = findOppositionCriterion();
         assert oppositionCriterion != null;
         assertEquals((Integer) points, oppositionCriterion.getPoints());
         assertNull(oppositionCriterion.getFeedback());
@@ -151,9 +149,9 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
         return gradingReportService.updateOppositionCriteria(gradingReport, opposition);
     }
 
-    private GradingCriterion findOppositionCriterion(String title) {
+    private GradingCriterion findOppositionCriterion() {
         for (GradingCriterion gradingCriterion : gradingReport.getIndividualCriteria()) {
-            if (gradingCriterion.getTitle().equals(title)) {
+            if (gradingCriterion.getFlag() == AbstractGradingCriterion.Flag.OPPOSITION) {
                 return gradingCriterion;
             }
         }
@@ -247,7 +245,7 @@ public class GradingReportServiceImplIntegrationTest extends IntegrationTest {
 
     private GradingReportTemplate createOppositionCriteria(GradingReportTemplate gradingReportTemplate, int maxPoints) {
         List<GradingCriterionPointTemplate> gradingCriterionPointTemplates = getPointTemplates(maxPoints, "Opposition");
-        gradingReportTemplate.addIndividualCriterion(OPPOSITION_SWEDISH, OPPOSITION_ENGLISH, 0, gradingCriterionPointTemplates);
+        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 0, gradingCriterionPointTemplates, AbstractGradingCriterion.Flag.OPPOSITION);
         return save(gradingReportTemplate);
     }
 
diff --git a/core/src/test/java/se/su/dsv/scipro/report/SupervisorGradingReportTest.java b/core/src/test/java/se/su/dsv/scipro/report/SupervisorGradingReportTest.java
index 3c8521cb1c..31829f71b7 100644
--- a/core/src/test/java/se/su/dsv/scipro/report/SupervisorGradingReportTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/report/SupervisorGradingReportTest.java
@@ -74,7 +74,7 @@ public class SupervisorGradingReportTest {
         gradingReportTemplate.addProjectCriterion("U12 Källhänvisningar och dokumentation", "U12 References and documentation", 1, getPointTemplates(1)).setFx(false);
         gradingReportTemplate.addProjectCriterion("U13 Originalitet och signifikans", "U13 Originality and significance", 0, getPointTemplates(3)).setFx(false);
 
-        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2));
+        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2), AbstractGradingCriterion.Flag.OPPOSITION);
         gradingReportTemplate.addIndividualCriterion("Ö2 Presentationer", "Ö2 Presentations", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö3 Aktivitet vid seminarier och möten", "Ö3 Participation in seminars and meetings", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö4 Deadlines", "Ö4 Deadlines", 0, getPointTemplates(1)).setFx(false);
diff --git a/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorBachelorGradeCalculatorTest.java b/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorBachelorGradeCalculatorTest.java
index 442b6989a1..da0c27eacd 100644
--- a/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorBachelorGradeCalculatorTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorBachelorGradeCalculatorTest.java
@@ -104,7 +104,7 @@ public class SupervisorBachelorGradeCalculatorTest extends GradeCalculatorTest {
         gradingReportTemplate.addProjectCriterion("U12 Källhänvisningar och dokumentation", "U12 References and documentation", 1, getPointTemplates(1));
         gradingReportTemplate.addProjectCriterion("U13 Originalitet och signifikans", "U13 Originality and significance", 0, getPointTemplates(3)).setFx(false);
 
-        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2));
+        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2), AbstractGradingCriterion.Flag.OPPOSITION);
         gradingReportTemplate.addIndividualCriterion("Ö2 Presentationer", "Ö2 Presentations", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö3 Aktivitet vid seminarier och möten", "Ö3 Participation in seminars and meetings", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö4 Deadlines", "Ö4 Deadlines", 0, getPointTemplates(1)).setFx(false);
diff --git a/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster15GradeCalculatorTest.java b/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster15GradeCalculatorTest.java
index e4c56d2809..17c8257e8d 100644
--- a/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster15GradeCalculatorTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster15GradeCalculatorTest.java
@@ -91,7 +91,7 @@ public class SupervisorMaster15GradeCalculatorTest extends GradeCalculatorTest {
         gradingReportTemplate.addProjectCriterion("U12 Källhänvisningar och dokumentation", "U12 References and documentation", 1, getPointTemplates(1));
         gradingReportTemplate.addProjectCriterion("U13 Originalitet och signifikans", "U13 Originality and significance", 1, getPointTemplates(3));
 
-        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2));
+        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2), AbstractGradingCriterion.Flag.OPPOSITION);
         gradingReportTemplate.addIndividualCriterion("Ö2 Presentationer", "Ö2 Presentations", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö3 Aktivitet vid seminarier och möten", "Ö3 Participation in seminars and meetings", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö4 Deadlines", "Ö4 Deadlines", 0, getPointTemplates(1)).setFx(false);
diff --git a/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster30GradeCalculatorTest.java b/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster30GradeCalculatorTest.java
index 70122fcf7d..3924773fd0 100644
--- a/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster30GradeCalculatorTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/report/calculators/original/SupervisorMaster30GradeCalculatorTest.java
@@ -91,7 +91,7 @@ public class SupervisorMaster30GradeCalculatorTest extends GradeCalculatorTest {
         gradingReportTemplate.addProjectCriterion("U12 Källhänvisningar och dokumentation", "U12 References and documentation", 1, getPointTemplates(1));
         gradingReportTemplate.addProjectCriterion("U13 Originalitet och signifikans", "U13 Originality and significance", 2, getPointTemplates(4));
 
-        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2));
+        gradingReportTemplate.addIndividualCriterion("Ö1 Oppositionsrapport", "Ö1 Opposition report", 1, getPointTemplates(2), AbstractGradingCriterion.Flag.OPPOSITION);
         gradingReportTemplate.addIndividualCriterion("Ö2 Presentationer", "Ö2 Presentations", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö3 Aktivitet vid seminarier och möten", "Ö3 Participation in seminars and meetings", 1, getPointTemplates(1));
         gradingReportTemplate.addIndividualCriterion("Ö4 Deadlines", "Ö4 Deadlines", 0, getPointTemplates(1));