diff --git a/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java b/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java
index de0b76037f..d6c35f2c4b 100644
--- a/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java
+++ b/war/src/main/java/se/su/dsv/scipro/war/CoreConfig.java
@@ -3,11 +3,13 @@ package se.su.dsv.scipro.war;
 import com.google.common.eventbus.EventBus;
 import jakarta.inject.Provider;
 import jakarta.persistence.EntityManager;
+import org.apache.wicket.protocol.http.WebApplication;
 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.CurrentUserFromWicketSession;
+import se.su.dsv.scipro.DataInitializer;
 import se.su.dsv.scipro.FileSystemStore;
 import se.su.dsv.scipro.activityplan.ActivityPlanFacade;
 import se.su.dsv.scipro.activityplan.ActivityPlanFacadeImpl;
@@ -18,6 +20,11 @@ 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.ForwardPhase2Feedback;
+import se.su.dsv.scipro.crosscutting.ReviewerAssignedDeadline;
+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.daisyExternal.http.DaisyAPIImpl;
 import se.su.dsv.scipro.date.DateServiceImpl;
 import se.su.dsv.scipro.file.FileDescriptionRepo;
@@ -31,6 +38,7 @@ import se.su.dsv.scipro.file.ProjectFileServiceImpl;
 import se.su.dsv.scipro.finalseminar.AuthorRepository;
 import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationRepository;
 import se.su.dsv.scipro.finalseminar.FinalSeminarActiveParticipationServiceImpl;
+import se.su.dsv.scipro.finalseminar.FinalSeminarCreationSubscribers;
 import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionRepo;
 import se.su.dsv.scipro.finalseminar.FinalSeminarOppositionServiceImpl;
 import se.su.dsv.scipro.finalseminar.FinalSeminarRepository;
@@ -56,6 +64,8 @@ import se.su.dsv.scipro.forum.GroupThreadRepository;
 import se.su.dsv.scipro.forum.ProjectForumService;
 import se.su.dsv.scipro.forum.ProjectForumServiceImpl;
 import se.su.dsv.scipro.forum.ProjectThreadRepository;
+import se.su.dsv.scipro.forum.notifications.ForumNotificationRepository;
+import se.su.dsv.scipro.forum.notifications.ForumNotifications;
 import se.su.dsv.scipro.gdpr.ZipReporter;
 import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsService;
 import se.su.dsv.scipro.generalsystemsettings.GeneralSystemSettingsServiceImpl;
@@ -69,8 +79,13 @@ import se.su.dsv.scipro.grading.PublicationMetadataServiceImpl;
 import se.su.dsv.scipro.grading.ThesisSubmissionHistoryService;
 import se.su.dsv.scipro.group.GroupService;
 import se.su.dsv.scipro.group.GroupServiceImpl;
+import se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarRepository;
+import se.su.dsv.scipro.integration.activityfinalseminar.FinalSeminarActivityHandler;
+import se.su.dsv.scipro.integration.activityforum.ActivityThreadRepository;
+import se.su.dsv.scipro.integration.activityforum.PostActivityUploadToForum;
 import se.su.dsv.scipro.mail.MailEventService;
 import se.su.dsv.scipro.mail.MailEventServiceImpl;
+import se.su.dsv.scipro.match.AddActivityPlanOnProjectStart;
 import se.su.dsv.scipro.match.ApplicationPeriodFacadeImpl;
 import se.su.dsv.scipro.match.ApplicationPeriodProjectTypeServiceImpl;
 import se.su.dsv.scipro.match.ApplicationPeriodService;
@@ -84,9 +99,12 @@ import se.su.dsv.scipro.match.MatchFollowUpServiceImpl;
 import se.su.dsv.scipro.match.MatchServiceImpl;
 import se.su.dsv.scipro.match.PreliminaryMatchServiceImpl;
 import se.su.dsv.scipro.match.ProgramServiceImpl;
+import se.su.dsv.scipro.match.ProjectStartNotifier;
 import se.su.dsv.scipro.match.TargetRepository;
 import se.su.dsv.scipro.match.TargetServiceImpl;
 import se.su.dsv.scipro.milestones.MilestoneActivityTemplateRepository;
+import se.su.dsv.scipro.milestones.service.ActivateCompletedMilestonesOnNewProjects;
+import se.su.dsv.scipro.milestones.service.MilestoneActivityTemplateService;
 import se.su.dsv.scipro.milestones.service.impl.MilestoneActivityTemplateServiceImpl;
 import se.su.dsv.scipro.milestones.service.impl.MilestonePhaseTemplateServiceImpl;
 import se.su.dsv.scipro.milestones.service.impl.MilestoneServiceImpl;
@@ -98,7 +116,9 @@ import se.su.dsv.scipro.nonworkperiod.NonWorkDayPeriodServiceImpl;
 import se.su.dsv.scipro.notes.NoteServiceImpl;
 import se.su.dsv.scipro.notifications.NotificationController;
 import se.su.dsv.scipro.notifications.NotificationControllerImpl;
+import se.su.dsv.scipro.notifications.NotificationService;
 import se.su.dsv.scipro.notifications.NotificationServiceImpl;
+import se.su.dsv.scipro.notifications.Notifications;
 import se.su.dsv.scipro.notifications.interfaces.NotificationMailFormatter;
 import se.su.dsv.scipro.notifications.interfaces.impl.NotificationMailFormatterImpl;
 import se.su.dsv.scipro.notifications.settings.service.DeliveryConfigurationService;
@@ -153,6 +173,9 @@ import se.su.dsv.scipro.reviewing.ReviewerThreadRepository;
 import se.su.dsv.scipro.reviewing.ReviewingServiceImpl;
 import se.su.dsv.scipro.reviewing.RoughDraftApprovalService;
 import se.su.dsv.scipro.reviewing.RoughDraftApprovalServiceImpl;
+import se.su.dsv.scipro.security.auth.AuthenticationProvider;
+import se.su.dsv.scipro.security.auth.AuthenticationServiceImpl;
+import se.su.dsv.scipro.security.auth.LocalAuthentication;
 import se.su.dsv.scipro.springdata.serviceimpls.SupervisorServiceImpl;
 import se.su.dsv.scipro.springdata.serviceimpls.UnitServiceImpl;
 import se.su.dsv.scipro.springdata.serviceimpls.UserProfileServiceImpl;
@@ -168,6 +191,9 @@ import se.su.dsv.scipro.system.ExternalResourceServiceImpl;
 import se.su.dsv.scipro.system.FooterLinkRepo;
 import se.su.dsv.scipro.system.FooterLinkServiceImpl;
 import se.su.dsv.scipro.system.LocalUserSearch;
+import se.su.dsv.scipro.system.PasswordRepo;
+import se.su.dsv.scipro.system.PasswordService;
+import se.su.dsv.scipro.system.PasswordServiceImpl;
 import se.su.dsv.scipro.system.ProjectTypeServiceImpl;
 import se.su.dsv.scipro.system.ResearchAreaServiceImpl;
 import se.su.dsv.scipro.system.UserNameServiceImpl;
@@ -178,6 +204,7 @@ import se.su.dsv.scipro.thesislink.ExternalLinkServiceImpl;
 import se.su.dsv.scipro.workerthreads.WorkerDataServiceImpl;
 
 import java.time.Clock;
+import java.util.Set;
 
 @Configuration(proxyBeanMethods = false)
 public class CoreConfig {
@@ -300,6 +327,19 @@ public class CoreConfig {
         return new ApplicationPeriodServiceImpl(em, clock);
     }
 
+    @Bean
+    public AuthenticationServiceImpl authenticationService(Set<AuthenticationProvider> authenticationProviders) {
+        return new AuthenticationServiceImpl(authenticationProviders);
+    }
+
+    @Bean
+    public LocalAuthentication localAuthentication(
+            UserService userService,
+            PasswordService passwordService)
+    {
+        return new LocalAuthentication(userService, passwordService);
+    }
+
     @Bean
     public BasicForumServiceImpl basicForumService(
             ForumPostRepository forumPostRepository,
@@ -593,6 +633,11 @@ public class CoreConfig {
                 fileService, finalSeminarOppositionRepository);
     }
 
+    @Bean
+    public PasswordServiceImpl passwordService(PasswordRepo passwordRepo) {
+        return new PasswordServiceImpl(passwordRepo);
+    }
+
     @Bean
     public PeerPortalImpl peerPortal(
             FileService fileService,
@@ -880,4 +925,135 @@ public class CoreConfig {
     public CurrentUserFromWicketSession currentUserFromWicketSession() {
         return new CurrentUserFromWicketSession();
     }
+
+    @Bean
+    public ReviewingNotifications reviewingNotifications(
+            EventBus eventBus,
+            NotificationController notificationController,
+            GeneralSystemSettingsService generalSystemSettingsService,
+            WebApplication webApplication)
+    {
+        return new ReviewingNotifications(eventBus, notificationController, generalSystemSettingsService,
+                webApplication);
+    }
+
+    @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,
+            ReviewerDeadlineSettingsService reviewerDeadlineSettingsService,
+            RoughDraftApprovalService roughDraftApprovalService,
+            FinalSeminarApprovalService finalSeminarApprovalService,
+            DaysService daysService,
+            Clock clock)
+    {
+        return new ReviewerAssignedDeadline(roughDraftApprovalService, finalSeminarApprovalService,
+                reviewerDeadlineSettingsService, daysService, eventBus, clock);
+    }
+
+    @Bean
+    public ForwardPhase2Feedback forwardPhase2Feedback(
+            EventBus eventBus,
+            WebApplication webApplication,
+            ProjectForumService projectForumService)
+    {
+        return new ForwardPhase2Feedback(webApplication, projectForumService, eventBus);
+    }
+
+    @Bean
+    public DataInitializer dataInitializer() {
+        return new DataInitializer();
+    }
+
+    @Bean
+    public FinalSeminarActivityHandler finalSeminarActivityHandler(
+            ActivityPlanFacade activityPlanFacade,
+            ActivityFinalSeminarRepository activityFinalSeminarRepository,
+            EventBus eventBus)
+    {
+        return new FinalSeminarActivityHandler(activityPlanFacade, activityFinalSeminarRepository, eventBus);
+    }
+
+    @Bean
+    public PostActivityUploadToForum postActivityUploadToForum(
+            EventBus eventBus,
+            ProjectForumService projectForumService,
+            ActivityThreadRepository activityThreadRepository)
+    {
+        return new PostActivityUploadToForum(projectForumService, activityThreadRepository, eventBus);
+    }
+
+    @Bean
+    public ForumNotifications forumNotifications(
+            EventBus eventBus,
+            NotificationController notificationController,
+            ForumNotificationRepository forumNotificationRepository,
+            NotificationService notificationService)
+    {
+        return new ForumNotifications(eventBus, notificationController, forumNotificationRepository,
+                notificationService);
+    }
+
+    @Bean
+    public ActivateCompletedMilestonesOnNewProjects activateCompletedMilestonesOnNewProjects(
+            EventBus eventBus,
+            MilestoneServiceImpl milestoneService,
+            PeerReviewService peerReviewService,
+            MilestoneActivityTemplateService milestoneActivityTemplateService,
+            FinalSeminarService finalSeminarService)
+    {
+        return new ActivateCompletedMilestonesOnNewProjects(peerReviewService, milestoneActivityTemplateService,
+                milestoneService, eventBus, finalSeminarService);
+    }
+
+    @Bean
+    public FinalSeminarCreationSubscribers finalSeminarCreationSubscribers(
+            EventBus eventBus,
+            FinalSeminarServiceImpl finalSeminarService,
+            NotificationController notificationController,
+            AuthorRepository authorRepository)
+    {
+        return new FinalSeminarCreationSubscribers(authorRepository, finalSeminarService, notificationController, eventBus);
+    }
+
+    @Bean
+    public ProjectStartNotifier projectStartNotifier(EventBus eventBus, NotificationController notificationController) {
+        return new ProjectStartNotifier(eventBus, notificationController);
+    }
+
+    @Bean
+    public AddActivityPlanOnProjectStart addActivityPlanOnProjectStart(
+            ActivityPlanFacade activityPlanFacade,
+            EventBus eventBus)
+    {
+        return new AddActivityPlanOnProjectStart(activityPlanFacade, eventBus);
+    }
+
+    @Bean
+    public Notifications notifications(
+            EventBus eventBus,
+            NotificationController notificationController,
+            NotificationService notificationService)
+    {
+        return new Notifications(notificationController, notificationService, eventBus);
+    }
 }
diff --git a/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java b/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java
index f984765ff8..bcde25f2ae 100644
--- a/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java
+++ b/war/src/main/java/se/su/dsv/scipro/war/RepositoryConfiguration.java
@@ -18,20 +18,19 @@ import se.su.dsv.scipro.forum.ForumPostReadStateRepositoryImpl;
 import se.su.dsv.scipro.forum.ForumPostRepositoryImpl;
 import se.su.dsv.scipro.forum.GroupThreadRepositoryImpl;
 import se.su.dsv.scipro.forum.ProjectThreadRepositoryImpl;
+import se.su.dsv.scipro.forum.notifications.ForumNotificationRepositoryImpl;
 import se.su.dsv.scipro.grading.GradingHistoryEventRepositoryImpl;
 import se.su.dsv.scipro.grading.NationalSubjectCategoryRepositoryImpl;
-import se.su.dsv.scipro.grading.PublicationMetadataRepository;
 import se.su.dsv.scipro.grading.PublicationMetadataRepositoryImpl;
 import se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarRepositoryImpl;
+import se.su.dsv.scipro.integration.activityforum.ActivityThreadRepositoryImpl;
 import se.su.dsv.scipro.match.FirstMeetingRepositoryImpl;
 import se.su.dsv.scipro.match.IdeaRepositoryImpl;
 import se.su.dsv.scipro.match.TargetRepositoryImpl;
 import se.su.dsv.scipro.milestones.MilestoneActivityTemplateRepositoryImpl;
 import se.su.dsv.scipro.peer.CommentThreadRepoImpl;
-import se.su.dsv.scipro.peer.PeerPortalImpl;
 import se.su.dsv.scipro.peer.PeerRequestRepositoryImpl;
 import se.su.dsv.scipro.peer.PeerReviewRepositoryImpl;
-import se.su.dsv.scipro.peer.PerformReviewService;
 import se.su.dsv.scipro.plagiarism.PlagiarismRequestRepositoryImpl;
 import se.su.dsv.scipro.plagiarism.urkund.UrkundSettingsRepositoryImpl;
 import se.su.dsv.scipro.plagiarism.urkund.UrkundSubmissionRepositoryImpl;
@@ -67,6 +66,11 @@ public class RepositoryConfiguration {
         return new ActivityFinalSeminarRepositoryImpl(em);
     }
 
+    @Bean
+    public ActivityThreadRepositoryImpl activityThreadRepository(Provider<EntityManager> em) {
+        return new ActivityThreadRepositoryImpl(em);
+    }
+
     @Bean
     public AuthorRepositoryImpl authorRepository(Provider<EntityManager> em) {
         return new AuthorRepositoryImpl(em);
@@ -132,6 +136,11 @@ public class RepositoryConfiguration {
         return new FooterLinkRepoImpl(em);
     }
 
+    @Bean
+    public ForumNotificationRepositoryImpl forumNotificationRepository(Provider<EntityManager> em) {
+        return new ForumNotificationRepositoryImpl(em);
+    }
+
     @Bean
     public ForumPostReadStateRepositoryImpl forumPostReadStateRepository(Provider<EntityManager> em) {
         return new ForumPostReadStateRepositoryImpl(em);