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 d9245d2155..a6ec1b8ffe 100644
--- a/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
+++ b/core/src/main/java/se/su/dsv/scipro/CoreConfig.java
@@ -65,6 +65,7 @@ import se.su.dsv.scipro.grading.NationalSubjectCategoryServiceImpl;
 import se.su.dsv.scipro.grading.PublicationMetadataRepository;
 import se.su.dsv.scipro.grading.PublicationMetadataServiceImpl;
 import se.su.dsv.scipro.grading.ThesisSubmissionHistoryService;
+import se.su.dsv.scipro.group.GroupFacadeImpl;
 import se.su.dsv.scipro.group.GroupService;
 import se.su.dsv.scipro.group.GroupServiceImpl;
 import se.su.dsv.scipro.integration.activityfinalseminar.ActivityFinalSeminarRepository;
@@ -79,6 +80,7 @@ import se.su.dsv.scipro.match.ApplicationPeriodProjectTypeServiceImpl;
 import se.su.dsv.scipro.match.ApplicationPeriodService;
 import se.su.dsv.scipro.match.ApplicationPeriodServiceImpl;
 import se.su.dsv.scipro.match.FirstMeetingRepository;
+import se.su.dsv.scipro.match.IdeaFacade;
 import se.su.dsv.scipro.match.IdeaRepository;
 import se.su.dsv.scipro.match.IdeaService;
 import se.su.dsv.scipro.match.IdeaServiceImpl;
@@ -1009,4 +1011,14 @@ public class CoreConfig {
     public NotificationEventServiceImpl notificationEventService(NotificationEventRepository notificationEventRepository) {
         return new NotificationEventServiceImpl(notificationEventRepository);
     }
+
+    @Bean
+    public IdeaFacade ideaFacade() {
+        return new IdeaFacade();
+    }
+
+    @Bean
+    public GroupFacadeImpl groupFacade() {
+        return new GroupFacadeImpl();
+    }
 }
diff --git a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImpl.java
index ee7478c33c..f532f0289d 100644
--- a/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/finalseminar/FinalSeminarRespondentServiceImpl.java
@@ -1,5 +1,6 @@
 package se.su.dsv.scipro.finalseminar;
 
+import jakarta.transaction.Transactional;
 import se.su.dsv.scipro.system.AbstractServiceImpl;
 import se.su.dsv.scipro.system.User;
 
@@ -33,6 +34,7 @@ public class FinalSeminarRespondentServiceImpl extends AbstractServiceImpl<Final
     }
 
     @Override
+    @Transactional
     public List<FinalSeminarRespondent> findOrCreate(FinalSeminar finalSeminar) {
         if(finalSeminar.getId() == null) {
             return new ArrayList<>();
diff --git a/core/src/main/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImpl.java
index 41251d1700..f505a3d189 100644
--- a/core/src/main/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/finalthesis/FinalThesisServiceImpl.java
@@ -56,6 +56,7 @@ public class FinalThesisServiceImpl extends AbstractServiceImpl<FinalThesis, Lon
     }
 
     @Override
+    @Transactional
     public FinalThesis upload(ProjectFileUpload fileUpload, String englishTitle, String swedishTitle) {
         ProjectFile fileDescription = storeFinalThesisFile(fileUpload);
         final FileReference reference = fileService.createReference(fileDescription.getFileDescription());
@@ -133,6 +134,7 @@ public class FinalThesisServiceImpl extends AbstractServiceImpl<FinalThesis, Lon
     }
 
     @Override
+    @Transactional
     public void removeApproval(Project project) {
         setStatus(project, FinalThesis.Status.NO_DECISION);
     }
diff --git a/core/src/main/java/se/su/dsv/scipro/firstmeeting/FirstMeetingServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/firstmeeting/FirstMeetingServiceImpl.java
index 23d1832201..1ab1e575a8 100644
--- a/core/src/main/java/se/su/dsv/scipro/firstmeeting/FirstMeetingServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/firstmeeting/FirstMeetingServiceImpl.java
@@ -1,5 +1,6 @@
 package se.su.dsv.scipro.firstmeeting;
 
+import jakarta.transaction.Transactional;
 import se.su.dsv.scipro.activityplan.Activity;
 import se.su.dsv.scipro.activityplan.ActivityPlanFacade;
 import se.su.dsv.scipro.project.Project;
@@ -26,6 +27,7 @@ public class FirstMeetingServiceImpl extends AbstractServiceImpl<ProjectFirstMee
     }
 
     @Override
+    @Transactional
     public ProjectFirstMeeting schedule(final Project project, final Date date, final String room, final String description) {
         final Optional<ProjectFirstMeeting> optFirstMeeting = findByProject(project);
         final ProjectFirstMeeting firstMeeting = optFirstMeeting
diff --git a/core/src/main/java/se/su/dsv/scipro/match/IdeaServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/match/IdeaServiceImpl.java
index d3c410eb05..e6be18e1c3 100755
--- a/core/src/main/java/se/su/dsv/scipro/match/IdeaServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/match/IdeaServiceImpl.java
@@ -358,7 +358,6 @@ public class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements
         }
     }
 
-    @Transactional
     private Idea acceptIdea0(Idea idea, User creator, Program accepteeProgram, User coAuthor, final ApplicationPeriod applicationPeriod) {
 
         Idea localIdea = idea;
@@ -442,6 +441,7 @@ public class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements
     }
 
     @Override
+    @Transactional
     public void studentUnselect(final Idea idea, final User student) {
         unmatch(idea, student, new NotificationSource());
     }
@@ -490,7 +490,6 @@ public class IdeaServiceImpl extends AbstractServiceImpl<Idea, Long> implements
         return returnValue;
     }
 
-    @Transactional
     private Idea addMatch(User creator, User supervisor, Idea idea, NotificationSource notificationSource) {
         Match match = new Match();
         match.setIdea(idea);
diff --git a/core/src/main/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImpl.java
index 70c69ddef2..f7b5b8c447 100644
--- a/core/src/main/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/milestones/service/impl/MilestoneServiceImpl.java
@@ -4,6 +4,7 @@ import com.querydsl.core.BooleanBuilder;
 import com.querydsl.core.types.Predicate;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import com.querydsl.jpa.impl.JPAQuery;
+import jakarta.transaction.Transactional;
 import se.su.dsv.scipro.system.Pageable;
 import se.su.dsv.scipro.milestones.dataobjects.Milestone;
 import se.su.dsv.scipro.milestones.dataobjects.MilestoneActivityTemplate;
@@ -54,6 +55,7 @@ public class MilestoneServiceImpl extends AbstractServiceImpl<Milestone, Long> i
     }
 
     @Override
+    @Transactional
     public void setConfirmed(Project project, MilestoneActivityTemplate activity, boolean confirmed) {
         if (confirmed) {
             for (MilestoneActivityTemplate earlierActivity : getEarlierIncompleteProjectMilestoneActivities(project, activity)) {
@@ -84,6 +86,7 @@ public class MilestoneServiceImpl extends AbstractServiceImpl<Milestone, Long> i
     }
 
     @Override
+    @Transactional
     public void setConfirmed(Project project, User student, MilestoneActivityTemplate activity, boolean confirmed) {
 
         if (!project.hasModule(ProjectModule.MILESTONES)) {
diff --git a/core/src/main/java/se/su/dsv/scipro/notes/NoteServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/notes/NoteServiceImpl.java
index 126470035e..58cb33dbc1 100755
--- a/core/src/main/java/se/su/dsv/scipro/notes/NoteServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/notes/NoteServiceImpl.java
@@ -1,6 +1,7 @@
 package se.su.dsv.scipro.notes;
 
 import com.querydsl.core.types.dsl.BooleanExpression;
+import jakarta.transaction.Transactional;
 import se.su.dsv.scipro.system.AbstractServiceImpl;
 import se.su.dsv.scipro.system.User;
 
@@ -20,6 +21,7 @@ public class NoteServiceImpl extends AbstractServiceImpl<Note, Long> implements
     }
 
     @Override
+    @Transactional
     public Note getNote(User user) {
         Note note = findOne(hasUser(user));
         if (note == null){
diff --git a/core/src/main/java/se/su/dsv/scipro/notifications/NotificationServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/notifications/NotificationServiceImpl.java
index 6c460a0741..5bbe68093e 100755
--- a/core/src/main/java/se/su/dsv/scipro/notifications/NotificationServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/notifications/NotificationServiceImpl.java
@@ -50,6 +50,7 @@ public class NotificationServiceImpl extends AbstractServiceImpl<Notification,Lo
     }
 
     @Override
+    @Transactional
     public void setRead(User user, NotificationEvent notificationEvent, boolean read) {
         Iterable<Notification> notifications = findAll(
                 QNotification.notification.notificationEvent.eq(notificationEvent)
@@ -62,6 +63,7 @@ public class NotificationServiceImpl extends AbstractServiceImpl<Notification,Lo
     }
 
     @Override
+    @Transactional
     @SuppressWarnings("unchecked")
     // This looks so wrong but a List<Notification> is what we actually get
     // during runtime, see SCIPRO-167935. Reflection so awesome...
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 1dd53e1665..876d3a4010 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
@@ -48,6 +48,7 @@ public class GradingReportServiceImpl implements GradingReportTemplateService, G
     }
 
     @Override
+    @Transactional
     public boolean updateOppositionCriteria(SupervisorGradingReport report, FinalSeminarOpposition opposition) {
         for (GradingCriterion gradingCriterion : report.getIndividualCriteria()) {
             boolean isOppositionCriterion = gradingCriterion.getFlag() == GradingCriterion.Flag.OPPOSITION;
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
index 44d938d819..a0f324029f 100644
--- a/core/src/main/java/se/su/dsv/scipro/report/ReportServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/report/ReportServiceImpl.java
@@ -22,12 +22,14 @@ public class ReportServiceImpl extends AbstractServiceImpl<Report, Long> impleme
     }
 
     @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);
diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerInteractionServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerInteractionServiceImpl.java
index a08f5ffcbc..f0e62aacc6 100644
--- a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerInteractionServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewerInteractionServiceImpl.java
@@ -49,6 +49,7 @@ public class ReviewerInteractionServiceImpl implements ReviewerInteractionServic
     }
 
     @Override
+    @Transactional
     public ForumPost reply(final Project project, final User user, final String content, final Set<Attachment> attachments) {
         ReviewerThread reviewerThread = getReviewerThread(project);
         ForumPost reply = forumService.createReply(reviewerThread.getForumThread(), user, content, attachments);
diff --git a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewingServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewingServiceImpl.java
index 9087510e37..b56e733c68 100644
--- a/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewingServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/reviewing/ReviewingServiceImpl.java
@@ -7,6 +7,7 @@ import com.querydsl.core.types.Predicate;
 import com.querydsl.core.types.dsl.BooleanExpression;
 import com.querydsl.core.types.dsl.LiteralExpression;
 import com.querydsl.jpa.impl.JPAQuery;
+import jakarta.transaction.Transactional;
 import se.su.dsv.scipro.file.FileReference;
 import se.su.dsv.scipro.file.FileService;
 import se.su.dsv.scipro.file.FileUpload;
@@ -92,6 +93,7 @@ public class ReviewingServiceImpl extends AbstractServiceImpl<ReviewerApproval,
     }
 
     @Override
+    @Transactional
     public void reject(final ReviewerApproval reviewerApproval, final String reason, final Optional<FileUpload> feedback) {
         Optional<FileReference> feedbackFile = store(feedback);
         reviewerApproval.reject(reason, feedbackFile);
@@ -106,6 +108,7 @@ public class ReviewingServiceImpl extends AbstractServiceImpl<ReviewerApproval,
     }
 
     @Override
+    @Transactional
     public void approve(final ReviewerApproval process, final String reason, final Optional<FileUpload> feedback) {
         Optional<FileReference> feedbackFile = store(feedback);
         process.approve(reason, feedbackFile);
diff --git a/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java
index 788ae44b07..992aa54888 100644
--- a/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/springdata/serviceimpls/UserProfileServiceImpl.java
@@ -38,6 +38,7 @@ public class UserProfileServiceImpl extends AbstractServiceImpl<UserProfile, Lon
     }
 
     @Override
+    @Transactional
     public Roles findSelectedRole(User user) {
         return findByUser(user).getSelectedRole();
     }
diff --git a/core/src/main/java/se/su/dsv/scipro/system/ResearchAreaServiceImpl.java b/core/src/main/java/se/su/dsv/scipro/system/ResearchAreaServiceImpl.java
index 76dc29c854..3c75c66915 100755
--- a/core/src/main/java/se/su/dsv/scipro/system/ResearchAreaServiceImpl.java
+++ b/core/src/main/java/se/su/dsv/scipro/system/ResearchAreaServiceImpl.java
@@ -3,6 +3,8 @@ package se.su.dsv.scipro.system;
 import jakarta.inject.Inject;
 import jakarta.inject.Provider;
 import jakarta.persistence.EntityManager;
+import jakarta.transaction.Transactional;
+
 import java.util.Comparator;
 import java.util.List;
 
@@ -13,6 +15,7 @@ public class ResearchAreaServiceImpl extends AbstractServiceImpl<ResearchArea,Lo
     }
 
     @Override
+    @Transactional
     public ResearchArea updateExternalResearchArea(Long identifier, String name, final boolean active) {
         ResearchArea ra = new ResearchArea();
         if (identifier != null) {