diff --git a/core/src/main/java/se/su/dsv/scipro/war/PluginConfiguration.java b/core/src/main/java/se/su/dsv/scipro/war/PluginConfiguration.java
new file mode 100644
index 0000000000..a111714130
--- /dev/null
+++ b/core/src/main/java/se/su/dsv/scipro/war/PluginConfiguration.java
@@ -0,0 +1,4 @@
+package se.su.dsv.scipro.war;
+
+public interface PluginConfiguration {
+}
diff --git a/daisy-integration/pom.xml b/daisy-integration/pom.xml
index 891a45a81e..7c31d026ff 100644
--- a/daisy-integration/pom.xml
+++ b/daisy-integration/pom.xml
@@ -16,6 +16,10 @@
             <groupId>se.su.dsv.scipro</groupId>
             <artifactId>core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.google.inject.extensions</groupId>
             <artifactId>guice-servlet</artifactId>
diff --git a/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/DaisyIntegrationConfiguration.java b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/DaisyIntegrationConfiguration.java
new file mode 100644
index 0000000000..1a50b0c056
--- /dev/null
+++ b/daisy-integration/src/main/java/se/su/dsv/scipro/integration/daisy/DaisyIntegrationConfiguration.java
@@ -0,0 +1,182 @@
+package se.su.dsv.scipro.integration.daisy;
+
+import com.google.common.eventbus.EventBus;
+import jakarta.inject.Provider;
+import jakarta.persistence.EntityManager;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import se.su.dsv.scipro.daisyExternal.ExternalImporter;
+import se.su.dsv.scipro.daisyExternal.ImporterTransactions;
+import se.su.dsv.scipro.daisyExternal.http.DaisyAPI;
+import se.su.dsv.scipro.daisyExternal.impl.ExternalImporterDaisyImpl;
+import se.su.dsv.scipro.daisyExternal.impl.ImporterTransactionsImpl;
+import se.su.dsv.scipro.finalseminar.FinalSeminarService;
+import se.su.dsv.scipro.finalthesis.FinalThesisService;
+import se.su.dsv.scipro.forum.ProjectForumService;
+import se.su.dsv.scipro.grading.NationalSubjectCategoryService;
+import se.su.dsv.scipro.grading.ThesisApprovedHistoryService;
+import se.su.dsv.scipro.grading.ThesisRejectionHistoryService;
+import se.su.dsv.scipro.integration.daisy.workers.GradingCompletedMilestoneActivator;
+import se.su.dsv.scipro.integration.daisy.workers.ImportNationalCategories;
+import se.su.dsv.scipro.integration.daisy.workers.ProjectExporter;
+import se.su.dsv.scipro.integration.daisy.workers.ProjectFinalizer;
+import se.su.dsv.scipro.integration.daisy.workers.RejectedThesisWorker;
+import se.su.dsv.scipro.integration.daisy.workers.UserImportWorker;
+import se.su.dsv.scipro.io.ExternalExporter;
+import se.su.dsv.scipro.io.facade.ExporterFacade;
+import se.su.dsv.scipro.io.impl.ExternalExporterDaisyImpl;
+import se.su.dsv.scipro.match.ProgramService;
+import se.su.dsv.scipro.project.ProjectRepo;
+import se.su.dsv.scipro.project.ProjectService;
+import se.su.dsv.scipro.report.GradingReportService;
+import se.su.dsv.scipro.springdata.services.UnitService;
+import se.su.dsv.scipro.system.MergeService;
+import se.su.dsv.scipro.system.MergeServiceImpl;
+import se.su.dsv.scipro.system.ResearchAreaService;
+import se.su.dsv.scipro.system.UserNameService;
+import se.su.dsv.scipro.system.UserService;
+import se.su.dsv.scipro.war.PluginConfiguration;
+import se.su.dsv.scipro.workerthreads.Scheduler;
+
+@Configuration
+public class DaisyIntegrationConfiguration implements PluginConfiguration {
+    @Bean
+    public Daisy daisy(ExporterFacade exporterFacade, ExternalExporter externalExporter) {
+        return new Daisy(exporterFacade, externalExporter);
+    }
+
+    @Bean
+    public ExporterFacade exporterFacade(ExternalExporter externalExporter) {
+        return new ExporterFacade(externalExporter);
+    }
+
+    @Bean
+    public ExternalExporterDaisyImpl externalExporter(DaisyAPI daisyApi) {
+        return new ExternalExporterDaisyImpl(daisyApi);
+    }
+
+    @Bean
+    public DaisyWorkerInitialization daisyWorkerInitialization(
+            Scheduler scheduler,
+            Provider<ProjectExporter> projectExporter,
+            Provider<UserImportWorker> userImportWorker,
+            Provider<ProjectFinalizer> projectFinalizer,
+            Provider<RejectedThesisWorker> rejectedThesisWorkerProvider,
+            Provider<GradingCompletedMilestoneActivator> gradingFinalizer,
+            Provider<ImportNationalCategories> importNationalCategories)
+    {
+        return new DaisyWorkerInitialization(scheduler, projectExporter, userImportWorker, projectFinalizer,
+                rejectedThesisWorkerProvider, gradingFinalizer, importNationalCategories);
+    }
+
+    @Bean
+    public ProjectExporter projectExporter(
+            ExporterFacade exporterFacade,
+            ProjectRepo projectRepo,
+            DaisyAPI daisyApi,
+            ExternalExporter externalExporter,
+            FinalSeminarService finalSeminarService,
+            FinalThesisService finalThesisService)
+    {
+        return new ProjectExporter(projectRepo, exporterFacade, daisyApi, externalExporter, finalSeminarService,
+                finalThesisService);
+    }
+
+    @Bean
+    public UserImportWorker userImportWorker(
+            DaisyAPI daisyApi,
+            ImporterTransactions importerTransactions,
+            ExternalImporter externalImporter,
+            MergeService mergeService,
+            UserService userService,
+            ProgramService programService,
+            Provider<EntityManager> entityManager,
+            ResearchAreaService researchAreaService)
+    {
+        return new UserImportWorker(daisyApi, importerTransactions, externalImporter, mergeService, userService,
+                programService, entityManager, researchAreaService);
+    }
+
+    @Bean
+    public ProjectFinalizer projectFinalizer(
+            ProjectService projectService,
+            DaisyAPI daisyApi,
+            ThesisApprovedHistoryService thesisApprovedHistoryService)
+    {
+        return new ProjectFinalizer(projectService, daisyApi, thesisApprovedHistoryService);
+    }
+
+    @Bean
+    public RejectedThesisWorker rejectedThesisWorker(
+            GradingReportService gradingReportService,
+            ProjectService projectService,
+            FinalThesisService finalThesisService,
+            ProjectForumService projectForumService,
+            ThesisRejectionHistoryService thesisRejectionHistoryService,
+            DaisyAPI daisyApi)
+    {
+        return new RejectedThesisWorker(gradingReportService, projectService, finalThesisService, projectForumService,
+                thesisRejectionHistoryService, daisyApi);
+    }
+
+    @Bean
+    public GradingCompletedMilestoneActivator gradingFinalizer(
+            ProjectService projectService,
+            DaisyAPI daisyApi,
+            EventBus eventBus,
+            UserService userService)
+    {
+        return new GradingCompletedMilestoneActivator(projectService, daisyApi, eventBus, userService);
+    }
+
+    @Bean
+    public ImportNationalCategories importNationalCategories(
+            DaisyAPI daisyApi,
+            NationalSubjectCategoryService nationalSubjectCategoryService)
+    {
+        return new ImportNationalCategories(daisyApi, nationalSubjectCategoryService);
+    }
+
+    @Bean
+    public ImporterTransactionsImpl importerTransactions(
+            UserService userService,
+            ResearchAreaService researchAreaService,
+            ProjectService projectService,
+            UserNameService userNameService,
+            DaisyAPI daisyApi,
+            ProgramService programService)
+    {
+        return new ImporterTransactionsImpl(userService, researchAreaService, projectService, userNameService,
+                daisyApi, programService);
+    }
+
+    @Bean
+    public ExternalImporterDaisyImpl externalImporter(
+            DaisyAPI daisyApi,
+            ImporterTransactions importerTransactions,
+            UserService userService,
+            UnitService unitService)
+    {
+        return new ExternalImporterDaisyImpl(userService, unitService, daisyApi, importerTransactions);
+    }
+
+    @Bean
+    public MergeServiceImpl mergeService(UserService userService, UserNameService userNameService) {
+        return new MergeServiceImpl(userNameService, userService);
+    }
+
+    @Bean
+    SyncReviewerWithDaisy syncReviewerWithDaisy(DaisyAPI daisyApi, EventBus eventBus) {
+        return new SyncReviewerWithDaisy(daisyApi, eventBus);
+    }
+
+    @Bean
+    public DaisyUserSearchService daisyUserSearchService(DaisyAPI daisyApi, UserService userService) {
+        return new DaisyUserSearchService(daisyApi, userService);
+    }
+
+    @Bean
+    DaisyConsentService daisyConsentService(DaisyAPI daisyApi) {
+        return new DaisyConsentService(daisyApi);
+    }
+}
diff --git a/daisy-integration/src/main/resources/META-INF/services/se.su.dsv.scipro.war.PluginConfiguration b/daisy-integration/src/main/resources/META-INF/services/se.su.dsv.scipro.war.PluginConfiguration
new file mode 100644
index 0000000000..39148f50a9
--- /dev/null
+++ b/daisy-integration/src/main/resources/META-INF/services/se.su.dsv.scipro.war.PluginConfiguration
@@ -0,0 +1 @@
+se.su.dsv.scipro.integration.daisy.DaisyIntegrationConfiguration
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 083ac279c4..0767aa6107 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
@@ -34,6 +34,7 @@ import se.su.dsv.scipro.system.UserService;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.ServiceLoader;
 import java.util.Set;
 
 @SpringBootApplication(proxyBeanMethods = false)
@@ -47,6 +48,9 @@ public class Main extends SpringBootServletInitializer implements ServletContain
 
     @Override
     protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+        for (PluginConfiguration pluginConfiguration : ServiceLoader.load(PluginConfiguration.class)) {
+            builder.sources(pluginConfiguration.getClass());
+        }
         return builder.sources(Main.class);
     }