diff --git a/core/pom.xml b/core/pom.xml
index 288bdeca9e..a3c2a1a1e9 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -54,6 +54,10 @@
             <groupId>org.glassfish.jersey.inject</groupId>
             <artifactId>jersey-hk2</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
 
         <!--QueryDSL-->
         <dependency>
@@ -76,6 +80,16 @@
             <groupId>jakarta.transaction</groupId>
             <artifactId>jakarta.transaction-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.hibernate.orm</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.hsqldb</groupId>
+            <artifactId>hsqldb</artifactId>
+            <scope>test</scope>
+        </dependency>
 
         <!--Additional stuff-->
         <dependency>
diff --git a/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
similarity index 96%
rename from war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java
rename to core/src/main/java/se/su/dsv/scipro/CoreConfig.java
index 00d9fc4d3d..564e1730f7 100644
--- a/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java
+++ b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
@@ -1,13 +1,11 @@
-package se.su.dsv.scipro.war;
+package se.su.dsv.scipro;
 
 import com.google.common.eventbus.EventBus;
 import jakarta.inject.Provider;
 import jakarta.persistence.EntityManager;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import se.su.dsv.scipro.DataInitializer;
 import se.su.dsv.scipro.activityplan.ActivityPlanFacade;
 import se.su.dsv.scipro.activityplan.ActivityPlanFacadeImpl;
 import se.su.dsv.scipro.activityplan.ActivityPlanServiceImpl;
@@ -17,8 +15,6 @@ import se.su.dsv.scipro.checklist.ChecklistAnswerServiceImpl;
 import se.su.dsv.scipro.checklist.ChecklistServiceImpl;
 import se.su.dsv.scipro.checklist.ChecklistTemplateService;
 import se.su.dsv.scipro.checklist.ChecklistTemplateServiceImpl;
-import se.su.dsv.scipro.crosscutting.ReviewerAssignedNotifications;
-import se.su.dsv.scipro.crosscutting.ReviewerSupportMailer;
 import se.su.dsv.scipro.daisyExternal.http.DaisyAPIImpl;
 import se.su.dsv.scipro.date.DateServiceImpl;
 import se.su.dsv.scipro.file.FileDescriptionRepo;
@@ -44,8 +40,6 @@ import se.su.dsv.scipro.finalseminar.FinalSeminarSettingsServiceImpl;
 import se.su.dsv.scipro.finalseminar.FinalSeminarUploadControllerImpl;
 import se.su.dsv.scipro.finalthesis.FinalThesisService;
 import se.su.dsv.scipro.finalthesis.FinalThesisServiceImpl;
-import se.su.dsv.scipro.finalthesis.PublishingConsentService;
-import se.su.dsv.scipro.finalthesis.PublishingConsentUnavailable;
 import se.su.dsv.scipro.firstmeeting.FirstMeetingServiceImpl;
 import se.su.dsv.scipro.forum.AbstractThreadRepository;
 import se.su.dsv.scipro.forum.BasicForumService;
@@ -734,12 +728,6 @@ public class CoreConfig {
         return new PublicationMetadataServiceImpl(publicationMetadataRepository);
     }
 
-    @Bean
-    @ConditionalOnMissingBean(PublishingConsentService.class)
-    public PublishingConsentUnavailable publishingConsentService() {
-        return new PublishingConsentUnavailable();
-    }
-
     @Bean
     public ReflectionServiceImpl reflectionService(
             AuthorRepository authorRepository,
@@ -910,26 +898,6 @@ public class CoreConfig {
         return new NotificationMailFormatterImpl();
     }
 
-    @Bean
-    public ReviewerSupportMailer reviewerSupportMailer(
-            EventBus eventBus,
-            GeneralSystemSettingsService generalSystemSettingsService,
-            MailEventService mailEventService)
-    {
-        return new ReviewerSupportMailer(eventBus, mailEventService, generalSystemSettingsService);
-    }
-
-    @Bean
-    public ReviewerAssignedNotifications reviewerAssignedNotifications(
-            EventBus eventBus,
-            NotificationController notificationController,
-            RoughDraftApprovalService roughDraftApprovalService,
-            FinalSeminarApprovalService finalSeminarApprovalService)
-    {
-        return new ReviewerAssignedNotifications(roughDraftApprovalService,
-                finalSeminarApprovalService, notificationController, eventBus);
-    }
-
     @Bean
     public ReviewerAssignedDeadline reviewerAssignedDeadline(
             EventBus eventBus,
diff --git a/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java b/core/src/main/java/se/su/dsv/scipro/RepositoryConfiguration.java
similarity index 99%
rename from war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java
rename to core/src/main/java/se/su/dsv/scipro/RepositoryConfiguration.java
index 6f2d722a85..459d9741cc 100644
--- a/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java
+++ b/core/src/main/java/se/su/dsv/scipro/RepositoryConfiguration.java
@@ -1,4 +1,4 @@
-package se.su.dsv.scipro.war;
+package se.su.dsv.scipro;
 
 import jakarta.inject.Provider;
 import jakarta.persistence.EntityManager;
diff --git a/war/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTestChecklistMethods.java b/core/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTestChecklistMethods.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTestChecklistMethods.java
rename to core/src/test/java/se/su/dsv/scipro/activityplan/ActivityPlanFacadeImplIntegrationTestChecklistMethods.java
diff --git a/war/src/test/java/se/su/dsv/scipro/checklist/ChecklistTemplateServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/checklist/ChecklistTemplateServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/checklist/ChecklistTemplateServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/checklist/ChecklistTemplateServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/date/DateServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/date/DateServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/date/DateServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/date/DateServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarOppositionServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarSchedulingTest.java b/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarSchedulingTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarSchedulingTest.java
rename to core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarSchedulingTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/finalseminar/FinalSeminarServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/forum/ForumModuleTest.java b/core/src/test/java/se/su/dsv/scipro/forum/ForumModuleTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/forum/ForumModuleTest.java
rename to core/src/test/java/se/su/dsv/scipro/forum/ForumModuleTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/forum/GroupForumServiceTest.java b/core/src/test/java/se/su/dsv/scipro/forum/GroupForumServiceTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/forum/GroupForumServiceTest.java
rename to core/src/test/java/se/su/dsv/scipro/forum/GroupForumServiceTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/forum/ProjectForumServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/forum/ProjectForumServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/forum/ProjectForumServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/forum/ProjectForumServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/group/GroupServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/group/GroupServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/group/GroupServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/group/GroupServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/match/ApplicationPeriodServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/match/ApplicationPeriodServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/match/ApplicationPeriodServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/match/ApplicationPeriodServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/match/IdeaServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/match/IdeaServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/match/IdeaServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/match/IdeaServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/match/MatchFollowUpServiceTest.java b/core/src/test/java/se/su/dsv/scipro/match/MatchFollowUpServiceTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/match/MatchFollowUpServiceTest.java
rename to core/src/test/java/se/su/dsv/scipro/match/MatchFollowUpServiceTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/match/MatchModuleTest.java b/core/src/test/java/se/su/dsv/scipro/match/MatchModuleTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/match/MatchModuleTest.java
rename to core/src/test/java/se/su/dsv/scipro/match/MatchModuleTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/match/TargetServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/match/TargetServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/match/TargetServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/match/TargetServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/match/TestKeyword.java b/core/src/test/java/se/su/dsv/scipro/match/TestKeyword.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/match/TestKeyword.java
rename to core/src/test/java/se/su/dsv/scipro/match/TestKeyword.java
diff --git a/war/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestonePhaseTemplateServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestonePhaseTemplateServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestonePhaseTemplateServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestonePhaseTemplateServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneStatisticsServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneStatisticsServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneStatisticsServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/milestones/service/impl/MilestoneStatisticsServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/nonworkperiod/NonWorkDayPeriodServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/nonworkperiod/NonWorkDayPeriodServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/nonworkperiod/NonWorkDayPeriodServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/nonworkperiod/NonWorkDayPeriodServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/notifications/NotificationServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/notifications/settings/service/DeliveryConfigurationServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/notifications/settings/service/DeliveryConfigurationServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/notifications/settings/service/DeliveryConfigurationServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/notifications/settings/service/DeliveryConfigurationServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/notifications/settings/service/ReceiverConfigurationServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/notifications/settings/service/ReceiverConfigurationServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/notifications/settings/service/ReceiverConfigurationServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/notifications/settings/service/ReceiverConfigurationServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/peer/CommentServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/peer/CommentServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/peer/CommentServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/peer/CommentServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/peer/CommentThreadServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/peer/CommentThreadServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/peer/CommentThreadServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/peer/CommentThreadServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/peer/PeerRequestServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/peer/PeerRequestServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/peer/PeerRequestServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/peer/PeerRequestServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/peer/PeerReviewServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/peer/TestPeerReview.java b/core/src/test/java/se/su/dsv/scipro/peer/TestPeerReview.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/peer/TestPeerReview.java
rename to core/src/test/java/se/su/dsv/scipro/peer/TestPeerReview.java
diff --git a/war/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSettingsRepositoryTest.java b/core/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSettingsRepositoryTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSettingsRepositoryTest.java
rename to core/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSettingsRepositoryTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSubmissionRepositoryTest.java b/core/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSubmissionRepositoryTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSubmissionRepositoryTest.java
rename to core/src/test/java/se/su/dsv/scipro/plagiarism/urkund/UrkundSubmissionRepositoryTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/project/ProjectServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/project/ProjectServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/project/ProjectServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/project/ProjectServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/project/TestProject.java b/core/src/test/java/se/su/dsv/scipro/project/TestProject.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/project/TestProject.java
rename to core/src/test/java/se/su/dsv/scipro/project/TestProject.java
diff --git a/war/src/test/java/se/su/dsv/scipro/projectpartner/ProjectPartnerServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/projectpartner/ProjectPartnerServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/projectpartner/ProjectPartnerServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/projectpartner/ProjectPartnerServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java b/core/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java
rename to core/src/test/java/se/su/dsv/scipro/reflection/ReflectionServiceTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/report/GradingReportServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/reviewing/FinalSeminarApprovalServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/reviewing/FinalSeminarApprovalServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/reviewing/FinalSeminarApprovalServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/reviewing/FinalSeminarApprovalServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/reviewing/ReviewerCapacityServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/reviewing/ReviewerTest.java b/core/src/test/java/se/su/dsv/scipro/reviewing/ReviewerTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/reviewing/ReviewerTest.java
rename to core/src/test/java/se/su/dsv/scipro/reviewing/ReviewerTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/reviewing/ReviewingModuleTest.java b/core/src/test/java/se/su/dsv/scipro/reviewing/ReviewingModuleTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/reviewing/ReviewingModuleTest.java
rename to core/src/test/java/se/su/dsv/scipro/reviewing/ReviewingModuleTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/reviewing/ReviewingServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/reviewing/ReviewingServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/reviewing/ReviewingServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/reviewing/ReviewingServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/security/auth/LocalAuthenticationTest.java b/core/src/test/java/se/su/dsv/scipro/security/auth/LocalAuthenticationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/security/auth/LocalAuthenticationTest.java
rename to core/src/test/java/se/su/dsv/scipro/security/auth/LocalAuthenticationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/SupervisorServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/system/EventServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/system/EventServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/system/EventServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/system/EventServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/system/ProjectTypeServiceImplTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/system/ResearchAreaServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/system/ResearchAreaServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/system/ResearchAreaServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/system/ResearchAreaServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/system/UserServiceImplIntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/system/UserServiceImplIntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/system/UserServiceImplIntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/system/UserServiceImplIntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/test/InMemoryFileStore.java b/core/src/test/java/se/su/dsv/scipro/test/InMemoryFileStore.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/test/InMemoryFileStore.java
rename to core/src/test/java/se/su/dsv/scipro/test/InMemoryFileStore.java
diff --git a/war/src/test/java/se/su/dsv/scipro/test/IntegrationTest.java b/core/src/test/java/se/su/dsv/scipro/test/IntegrationTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/test/IntegrationTest.java
rename to core/src/test/java/se/su/dsv/scipro/test/IntegrationTest.java
diff --git a/war/src/test/java/se/su/dsv/scipro/test/Matchers.java b/core/src/test/java/se/su/dsv/scipro/test/Matchers.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/test/Matchers.java
rename to core/src/test/java/se/su/dsv/scipro/test/Matchers.java
diff --git a/war/src/test/java/se/su/dsv/scipro/test/MutableFixedClock.java b/core/src/test/java/se/su/dsv/scipro/test/MutableFixedClock.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/test/MutableFixedClock.java
rename to core/src/test/java/se/su/dsv/scipro/test/MutableFixedClock.java
diff --git a/war/src/test/java/se/su/dsv/scipro/test/SpringTest.java b/core/src/test/java/se/su/dsv/scipro/test/SpringTest.java
similarity index 91%
rename from war/src/test/java/se/su/dsv/scipro/test/SpringTest.java
rename to core/src/test/java/se/su/dsv/scipro/test/SpringTest.java
index 70491d9218..eae4492265 100644
--- a/war/src/test/java/se/su/dsv/scipro/test/SpringTest.java
+++ b/core/src/test/java/se/su/dsv/scipro/test/SpringTest.java
@@ -14,10 +14,8 @@ import org.springframework.context.annotation.Import;
 import se.su.dsv.scipro.profiles.CurrentProfile;
 import se.su.dsv.scipro.sukat.Sukat;
 import se.su.dsv.scipro.system.CurrentUser;
-import se.su.dsv.scipro.war.CoreConfig;
-import se.su.dsv.scipro.war.MailConfig;
-import se.su.dsv.scipro.war.RepositoryConfiguration;
-import se.su.dsv.scipro.war.WicketConfiguration;
+import se.su.dsv.scipro.CoreConfig;
+import se.su.dsv.scipro.RepositoryConfiguration;
 
 import java.time.Clock;
 import java.util.Optional;
@@ -62,7 +60,7 @@ public abstract class SpringTest {
     }
 
     @Configuration(proxyBeanMethods = false)
-    @Import({CoreConfig.class, RepositoryConfiguration.class, MailConfig.class, WicketConfiguration.class})
+    @Import({CoreConfig.class, RepositoryConfiguration.class})
     public static class TestContext {
         @Bean
         public InMemoryFileStore inMemoryFileStore() {
diff --git a/war/src/test/java/se/su/dsv/scipro/test/StreamingUpload.java b/core/src/test/java/se/su/dsv/scipro/test/StreamingUpload.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/test/StreamingUpload.java
rename to core/src/test/java/se/su/dsv/scipro/test/StreamingUpload.java
diff --git a/war/src/test/java/se/su/dsv/scipro/workerthreads/WorkerDataServiceImplTest.java b/core/src/test/java/se/su/dsv/scipro/workerthreads/WorkerDataServiceImplTest.java
similarity index 100%
rename from war/src/test/java/se/su/dsv/scipro/workerthreads/WorkerDataServiceImplTest.java
rename to core/src/test/java/se/su/dsv/scipro/workerthreads/WorkerDataServiceImplTest.java
diff --git a/war/pom.xml b/war/pom.xml
index 7bce7e453b..2c4ad17242 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -81,12 +81,6 @@
             <artifactId>api</artifactId>
             <version>${project.version}</version>
         </dependency>
-
-        <dependency>
-            <groupId>org.hsqldb</groupId>
-            <artifactId>hsqldb</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/war/src/main/java/se/su/dsv/scipro/war/Main.java b/war/src/main/java/se/su/dsv/scipro/war/Main.java
index 2c8b788036..026130dd7d 100644
--- a/war/src/main/java/se/su/dsv/scipro/war/Main.java
+++ b/war/src/main/java/se/su/dsv/scipro/war/Main.java
@@ -7,6 +7,7 @@ import jakarta.servlet.ServletContext;
 import jakarta.servlet.ServletException;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilderCustomizer;
 import org.springframework.boot.builder.SpringApplicationBuilder;
@@ -16,9 +17,13 @@ import org.springframework.context.annotation.Import;
 import org.springframework.core.task.SimpleAsyncTaskExecutor;
 import org.springframework.orm.jpa.SharedEntityManagerCreator;
 import org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter;
+import se.su.dsv.scipro.CoreConfig;
 import se.su.dsv.scipro.CurrentUserFromWicketSession;
 import se.su.dsv.scipro.FileSystemStore;
+import se.su.dsv.scipro.RepositoryConfiguration;
 import se.su.dsv.scipro.file.FileStore;
+import se.su.dsv.scipro.finalthesis.PublishingConsentService;
+import se.su.dsv.scipro.finalthesis.PublishingConsentUnavailable;
 import se.su.dsv.scipro.profiles.CurrentProfile;
 import se.su.dsv.scipro.system.AggregateUserSearch;
 import se.su.dsv.scipro.system.Lifecycle;
@@ -154,4 +159,10 @@ public class Main extends SpringBootServletInitializer implements ServletContain
     {
         return new AggregateUserSearch(userSearchProviders, userService);
     }
+
+    @Bean
+    @ConditionalOnMissingBean(PublishingConsentService.class)
+    public PublishingConsentUnavailable publishingConsentService() {
+        return new PublishingConsentUnavailable();
+    }
 }
diff --git a/war/src/main/java/se/su/dsv/scipro/war/WicketConfiguration.java b/war/src/main/java/se/su/dsv/scipro/war/WicketConfiguration.java
index 63c2eb45f1..f31d390c16 100644
--- a/war/src/main/java/se/su/dsv/scipro/war/WicketConfiguration.java
+++ b/war/src/main/java/se/su/dsv/scipro/war/WicketConfiguration.java
@@ -10,11 +10,16 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import se.su.dsv.scipro.SciProApplication;
 import se.su.dsv.scipro.crosscutting.ForwardPhase2Feedback;
+import se.su.dsv.scipro.crosscutting.ReviewerAssignedNotifications;
+import se.su.dsv.scipro.crosscutting.ReviewerSupportMailer;
 import se.su.dsv.scipro.crosscutting.ReviewingNotifications;
 import se.su.dsv.scipro.forum.ProjectForumService;
 import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
+import se.su.dsv.scipro.mail.MailEventService;
 import se.su.dsv.scipro.notifications.NotificationController;
 import se.su.dsv.scipro.profiles.CurrentProfile;
+import se.su.dsv.scipro.reviewing.FinalSeminarApprovalService;
+import se.su.dsv.scipro.reviewing.RoughDraftApprovalService;
 
 @Configuration
 public class WicketConfiguration {
@@ -60,4 +65,26 @@ public class WicketConfiguration {
     {
         return new ForwardPhase2Feedback(webApplication, projectForumService, eventBus);
     }
+
+    // Not sure why this dependency lives in the view module
+    @Bean
+    public ReviewerSupportMailer reviewerSupportMailer(
+            EventBus eventBus,
+            GeneralSystemSettingsService generalSystemSettingsService,
+            MailEventService mailEventService)
+    {
+        return new ReviewerSupportMailer(eventBus, mailEventService, generalSystemSettingsService);
+    }
+
+    // Not sure why this dependency lives in the view module
+    @Bean
+    public ReviewerAssignedNotifications reviewerAssignedNotifications(
+            EventBus eventBus,
+            NotificationController notificationController,
+            RoughDraftApprovalService roughDraftApprovalService,
+            FinalSeminarApprovalService finalSeminarApprovalService)
+    {
+        return new ReviewerAssignedNotifications(roughDraftApprovalService,
+                finalSeminarApprovalService, notificationController, eventBus);
+    }
 }
diff --git a/war/src/test/java/se/su/dsv/scipro/test/Dates.java b/war/src/test/java/se/su/dsv/scipro/test/Dates.java
deleted file mode 100644
index 54826ce825..0000000000
--- a/war/src/test/java/se/su/dsv/scipro/test/Dates.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package se.su.dsv.scipro.test;
-
-import java.time.Duration;
-import java.time.Instant;
-import java.time.Period;
-import java.util.Date;
-
-public class Dates {
-    public static Date yesterday() {
-        return Date.from(Instant.now().minus(Period.ofDays(1)));
-    }
-
-    public static Date tomorrow() {
-        return Date.from(Instant.now().plus(Period.ofDays(1)));
-    }
-
-    public static Date oneHourAgo() {
-        return Date.from(Instant.now().minus(Duration.ofHours(1)));
-    }
-}