diff --git a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
index 080ff17d1a..a8736d4f05 100644
--- a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
+++ b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
@@ -156,7 +156,6 @@ import se.su.dsv.scipro.report.GradingReportTemplateRepoImpl;
 import se.su.dsv.scipro.report.OppositionReportRepo;
 import se.su.dsv.scipro.report.OppositionReportService;
 import se.su.dsv.scipro.report.OppositionReportServiceImpl;
-import se.su.dsv.scipro.report.ReportServiceImpl;
 import se.su.dsv.scipro.report.SupervisorGradingReportRepository;
 import se.su.dsv.scipro.reviewing.DecisionRepository;
 import se.su.dsv.scipro.reviewing.FinalSeminarApprovalService;
@@ -875,11 +874,6 @@ public class CoreConfig {
         );
     }
 
-    @Bean
-    public ReportServiceImpl reportService(Provider<EntityManager> em, FileService fileService) {
-        return new ReportServiceImpl(em, fileService);
-    }
-
     @Bean
     public ResearchAreaServiceImpl researchAreaService(Provider<EntityManager> em) {
         return new ResearchAreaServiceImpl(em);
diff --git a/core/src/main/java/se/su/dsv/scipro/report/OppositionReportService.java b/core/src/main/java/se/su/dsv/scipro/report/OppositionReportService.java
index 60f1db90b0..3ec394e7a5 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/OppositionReportService.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/OppositionReportService.java
@@ -1,5 +1,7 @@
 package se.su.dsv.scipro.report;
 
+import java.util.Optional;
+import se.su.dsv.scipro.file.FileUpload;
 import se.su.dsv.scipro.finalseminar.FinalSeminarOpposition;
 
 public interface OppositionReportService {
@@ -7,4 +9,10 @@ public interface OppositionReportService {
     void save(OppositionReport oppositionReport);
     void deleteOppositionReport(FinalSeminarOpposition finalSeminarOpposition);
     void deleteOpponentReport(FinalSeminarOpposition modelObject);
+
+    AttachmentReport submit(OppositionReport report);
+
+    void save(OppositionReport report, Optional<FileUpload> fileUpload);
+
+    void deleteAttachment(OppositionReport report);
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/report/OppositionReportServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/report/OppositionReportServiceImpl.java
index f993503d09..c4ecfedfcc 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/OppositionReportServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/OppositionReportServiceImpl.java
@@ -3,8 +3,10 @@ package se.su.dsv.scipro.report;
 import jakarta.inject.Inject;
 import jakarta.inject.Named;
 import jakarta.transaction.Transactional;
+import java.util.Optional;
 import se.su.dsv.scipro.file.FileReference;
 import se.su.dsv.scipro.file.FileService;
+import se.su.dsv.scipro.file.FileUpload;
 import se.su.dsv.scipro.finalseminar.FinalSeminarOpposition;
 import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepo;
 
@@ -74,4 +76,34 @@ public class OppositionReportServiceImpl implements OppositionReportService {
             finalSeminarOppositionRepo.save(finalSeminarOpposition);
         }
     }
+
+    @Override
+    @Transactional
+    public OppositionReport submit(OppositionReport report) {
+        report.submit();
+        return oppositionReportRepo.save(report);
+    }
+
+    @Override
+    @Transactional
+    public void save(OppositionReport report, Optional<FileUpload> fileUpload) {
+        storeReportFile(report, fileUpload);
+        save(report);
+    }
+
+    @Override
+    @Transactional
+    public void deleteAttachment(OppositionReport report) {
+        FileReference attachment = report.getAttachment();
+        report.setAttachment(null);
+        fileService.delete(attachment);
+        oppositionReportRepo.save(report);
+    }
+
+    private void storeReportFile(OppositionReport report, Optional<FileUpload> fileUpload) {
+        if (fileUpload.isPresent()) {
+            final FileReference reference = fileService.storeFile(fileUpload.get());
+            report.setAttachment(reference);
+        }
+    }
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/report/ReportService.java b/core/src/main/java/se/su/dsv/scipro/report/ReportService.java
deleted file mode 100644
index a077143c0e..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/report/ReportService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package se.su.dsv.scipro.report;
-
-import java.util.Optional;
-import se.su.dsv.scipro.file.FileUpload;
-import se.su.dsv.scipro.system.GenericService;
-
-public interface ReportService extends GenericService<Report, Long> {
-    AttachmentReport submit(AttachmentReport report);
-
-    void save(AttachmentReport report, Optional<FileUpload> fileUpload);
-
-    void deleteAttachment(AttachmentReport report);
-}
diff --git a/core/src/main/java/se/su/dsv/scipro/report/ReportServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/report/ReportServiceImpl.java
deleted file mode 100644
index 41b6e7a2a6..0000000000
--- a/core/src/main/java/se/su/dsv/scipro/report/ReportServiceImpl.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package se.su.dsv.scipro.report;
-
-import jakarta.inject.Inject;
-import jakarta.inject.Provider;
-import jakarta.persistence.EntityManager;
-import jakarta.transaction.Transactional;
-import java.util.Optional;
-import se.su.dsv.scipro.file.FileReference;
-import se.su.dsv.scipro.file.FileService;
-import se.su.dsv.scipro.file.FileUpload;
-import se.su.dsv.scipro.system.AbstractServiceImpl;
-
-public class ReportServiceImpl extends AbstractServiceImpl<Report, Long> implements ReportService {
-
-    private final FileService fileDescriptionService;
-
-    @Inject
-    public ReportServiceImpl(Provider<EntityManager> em, final FileService fileDescriptionService) {
-        super(em, Report.class, QReport.report);
-        this.fileDescriptionService = fileDescriptionService;
-    }
-
-    @Override
-    @Transactional
-    public AttachmentReport submit(AttachmentReport report) {
-        report.submit();
-        return save(report);
-    }
-
-    @Override
-    @Transactional
-    public void save(AttachmentReport report, Optional<FileUpload> fileUpload) {
-        storeReportFile(report, fileUpload);
-        save(report);
-    }
-
-    @Override
-    @Transactional
-    public void deleteAttachment(AttachmentReport report) {
-        FileReference attachment = report.getAttachment();
-        report.setAttachment(null);
-        fileDescriptionService.delete(attachment);
-        save(report);
-    }
-
-    private void storeReportFile(AttachmentReport report, Optional<FileUpload> fileUpload) {
-        if (fileUpload.isPresent()) {
-            final FileReference reference = fileDescriptionService.storeFile(fileUpload.get());
-            report.setAttachment(reference);
-        }
-    }
-}
diff --git a/view/src/main/java/se/su/dsv/scipro/finalseminar/OppositionReportPage.java b/view/src/main/java/se/su/dsv/scipro/finalseminar/OppositionReportPage.java
index ca8f6f547d..802625bdc2 100644
--- a/view/src/main/java/se/su/dsv/scipro/finalseminar/OppositionReportPage.java
+++ b/view/src/main/java/se/su/dsv/scipro/finalseminar/OppositionReportPage.java
@@ -83,7 +83,7 @@ public class OppositionReportPage extends AbstractProjectDetailsPage implements
         );
 
         add(
-            new FillOutReportPanel<>(FILL_OUT_REPORT, report) {
+            new FillOutReportPanel(FILL_OUT_REPORT, report) {
                 {
                     TextArea<String> textArea = new TextArea<>(
                         THESIS_SUMMARY,
diff --git a/view/src/main/java/se/su/dsv/scipro/grading/FillOutReportPanel.java b/view/src/main/java/se/su/dsv/scipro/grading/FillOutReportPanel.java
index 95bfd72a34..e35ab7c896 100644
--- a/view/src/main/java/se/su/dsv/scipro/grading/FillOutReportPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/grading/FillOutReportPanel.java
@@ -25,12 +25,12 @@ import se.su.dsv.scipro.files.WicketFileUpload;
 import se.su.dsv.scipro.report.AttachmentReport;
 import se.su.dsv.scipro.report.Criterion;
 import se.su.dsv.scipro.report.OppositionReport;
-import se.su.dsv.scipro.report.ReportService;
+import se.su.dsv.scipro.report.OppositionReportService;
 import se.su.dsv.scipro.repository.panels.ViewAttachmentPanel;
 import se.su.dsv.scipro.system.Language;
 import se.su.dsv.scipro.util.JavascriptEventConfirmation;
 
-public class FillOutReportPanel<T extends OppositionReport> extends Border {
+public class FillOutReportPanel extends Border {
 
     public static final String FORM = "form";
     public static final String GRADING_CRITERIA = "criteria";
@@ -42,20 +42,20 @@ public class FillOutReportPanel<T extends OppositionReport> extends Border {
     public static final String FEEDBACK_PANEL = "feedbackPanel";
 
     @Inject
-    private ReportService reportService;
+    private OppositionReportService reportService;
 
-    public FillOutReportPanel(String id, final IModel<T> model) {
+    public FillOutReportPanel(String id, final IModel<OppositionReport> model) {
         super(id, model);
         ReportForm form = new ReportForm(FORM, model);
         addToBorder(new ScrollingSaveButtonPanel(SAVE, form));
         addToBorder(form);
     }
 
-    private class ReportForm extends StatelessForm<T> {
+    private class ReportForm extends StatelessForm<OppositionReport> {
 
         private final FileUploadField attachment;
 
-        public ReportForm(String id, final IModel<T> model) {
+        public ReportForm(String id, final IModel<OppositionReport> model) {
             super(id, model);
             add(new ComponentFeedbackPanel(FEEDBACK_PANEL, this));
             IModel<Language> language = model.map(OppositionReport::getLanguage);
@@ -139,9 +139,9 @@ public class FillOutReportPanel<T extends OppositionReport> extends Border {
         }
     }
 
-    private class DeleteAttachmentLink extends Link<T> {
+    private class DeleteAttachmentLink extends Link<OppositionReport> {
 
-        public DeleteAttachmentLink(String id, IModel<T> model) {
+        public DeleteAttachmentLink(String id, IModel<OppositionReport> model) {
             super(id, model);
             add(new JavascriptEventConfirmation("click", new ResourceModel("delete.attachment")));
         }
diff --git a/view/src/test/java/se/su/dsv/scipro/finalseminar/OppositionReportPageTest.java b/view/src/test/java/se/su/dsv/scipro/finalseminar/OppositionReportPageTest.java
index 6edbd445f0..aeb5e9c9ef 100644
--- a/view/src/test/java/se/su/dsv/scipro/finalseminar/OppositionReportPageTest.java
+++ b/view/src/test/java/se/su/dsv/scipro/finalseminar/OppositionReportPageTest.java
@@ -17,7 +17,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatchers;
-import org.mockito.Mock;
 import org.mockito.Mockito;
 import se.su.dsv.scipro.SciProTest;
 import se.su.dsv.scipro.file.FileDescription;
@@ -28,7 +27,6 @@ import se.su.dsv.scipro.project.pages.ProjectDetailsPage;
 import se.su.dsv.scipro.report.GradingCriterionPointTemplate;
 import se.su.dsv.scipro.report.GradingReportTemplate;
 import se.su.dsv.scipro.report.OppositionReport;
-import se.su.dsv.scipro.report.ReportService;
 import se.su.dsv.scipro.system.DegreeType;
 import se.su.dsv.scipro.system.ProjectType;
 import se.su.dsv.scipro.system.User;
@@ -41,9 +39,6 @@ public class OppositionReportPageTest extends SciProTest {
     public static final String CRITERION_DESCRIPTION = "For 1 point: Be nice to your supervisor";
     public static final String CRITERTION_TITLE = "U1 Sammanfattning";
 
-    @Mock
-    private ReportService reportService;
-
     private FinalSeminarOpposition finalSeminarOpposition;
     private User user;
     private ProjectType bachelor;
@@ -139,7 +134,7 @@ public class OppositionReportPageTest extends SciProTest {
         formTester.submit();
 
         ArgumentCaptor<OppositionReport> captor = ArgumentCaptor.forClass(OppositionReport.class);
-        Mockito.verify(reportService).save(captor.capture(), eq(Optional.empty()));
+        Mockito.verify(oppositionReportService).save(captor.capture(), eq(Optional.empty()));
 
         Assertions.assertEquals(summary, captor.getValue().getThesisSummary());
     }
diff --git a/view/src/test/java/se/su/dsv/scipro/grading/FillOutReportPanelTest.java b/view/src/test/java/se/su/dsv/scipro/grading/FillOutReportPanelTest.java
index e8e9367d12..5444ce2902 100644
--- a/view/src/test/java/se/su/dsv/scipro/grading/FillOutReportPanelTest.java
+++ b/view/src/test/java/se/su/dsv/scipro/grading/FillOutReportPanelTest.java
@@ -35,7 +35,7 @@ public class FillOutReportPanelTest extends SciProTest {
     private FillOutReportPanel panel;
 
     @Mock
-    private ReportService reportService;
+    private OppositionReportService reportService;
 
     @BeforeEach
     public void setUp() throws Exception {
@@ -197,6 +197,6 @@ public class FillOutReportPanelTest extends SciProTest {
     }
 
     private void startPanel() {
-        panel = tester.startComponentInPage(new FillOutReportPanel<>("id", Model.of(oppositionReport)));
+        panel = tester.startComponentInPage(new FillOutReportPanel("id", Model.of(oppositionReport)));
     }
 }