diff --git a/build.gradle.kts b/build.gradle.kts
index 860bfd3e1e76c5bf8fc68a5e960d68b185897e67..32ac35760d1a3909d3d501413ef57f80e9a2a759 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -8,7 +8,7 @@ version = "2.1.0"
 
 val javaVersion = JavaVersion.VERSION_17
 
-val labradoorVersion = "1.3.2-SNAPSHOT"
+val labradoorVersion = "1.4.1-SNAPSHOT"
 val libradorVersion = "1.2.2-SNAPSHOT"
 val chihuahUIVersion = "1.0.0"
 val samlVersion = "1.17"
diff --git a/src/main/java/nl/tudelft/submit/cache/RoleCacheManager.java b/src/main/java/nl/tudelft/submit/cache/RoleCacheManager.java
index 7ea44fd2d0b985cdda768e5c3d83cf16fdf04b51..ec8796cff505d6c9b37be9dd0230ff7d447c1971 100644
--- a/src/main/java/nl/tudelft/submit/cache/RoleCacheManager.java
+++ b/src/main/java/nl/tudelft/submit/cache/RoleCacheManager.java
@@ -41,8 +41,8 @@ public class RoleCacheManager extends CoreCacheManager<Id, RoleDetailsDTO> {
 	@Override
 	protected List<RoleDetailsDTO> fetch(List<Id> ids) {
 		return api.getRolesById(
-				ids.stream().map(Id::getEditionId).collect(Collectors.toList()),
-				ids.stream().map(Id::getPersonId).collect(Collectors.toList()))
+				ids.stream().map(Id::getEditionId).collect(Collectors.toSet()),
+				ids.stream().map(Id::getPersonId).collect(Collectors.toSet()))
 				.collectList().block();
 	}
 
diff --git a/src/main/java/nl/tudelft/submit/cache/SubmissionCacheManager.java b/src/main/java/nl/tudelft/submit/cache/SubmissionCacheManager.java
index 4357c5d7ca60bbe19be4081a7737842540781c55..eb6939072917df4b366013e15de233ca9ec57c87 100644
--- a/src/main/java/nl/tudelft/submit/cache/SubmissionCacheManager.java
+++ b/src/main/java/nl/tudelft/submit/cache/SubmissionCacheManager.java
@@ -17,6 +17,7 @@
  */
 package nl.tudelft.submit.cache;
 
+import java.util.HashSet;
 import java.util.List;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +36,7 @@ public class SubmissionCacheManager extends CoreCacheManager<Long, SubmissionDet
 
 	@Override
 	protected List<SubmissionDetailsDTO> fetch(List<Long> ids) {
-		return api.getAllSubmissionsById(ids).collectList().block();
+		return api.getAllSubmissionsById(new HashSet<>(ids)).collectList().block();
 	}
 
 	@Override
diff --git a/src/main/java/nl/tudelft/submit/service/AssignmentService.java b/src/main/java/nl/tudelft/submit/service/AssignmentService.java
index 835c2b3bb03985887b77dc8fe03228a0085cb7f7..30759bb4abdd5d1d2e7b5bc08bf2a4e927174544 100644
--- a/src/main/java/nl/tudelft/submit/service/AssignmentService.java
+++ b/src/main/java/nl/tudelft/submit/service/AssignmentService.java
@@ -181,9 +181,9 @@ public class AssignmentService {
 			patch.setAcceptLateSubmissions(false);
 		}
 		if (patch.getAllowedFileTypes() == null) {
-			patch.setAllowedFileTypes(Collections.emptyList());
+			patch.setAllowedFileTypes(Collections.emptySet());
 		}
-		id = assignmentApi.patchAssignment(id, patch).block();
+		id = assignmentApi.patchAssignment(patch, id).block();
 		assignmentRepository.save(assignmentPatchDTO.apply(getOrCreateSubmitAssignment(id)));
 
 		if (isTransparent(id)) {
@@ -344,7 +344,7 @@ public class AssignmentService {
 			GradeBatchImportDTO importDto = new GradeBatchImportDTO()
 					.type(GradeBatchImportDTO.TypeEnum.valueOf(gradeImport.getIdType().name()))
 					.grades(grades);
-			gradeApi.importGrades(assignmentId, importDto).block();
+			gradeApi.importGrades(importDto, assignmentId).block();
 		}
 	}
 
diff --git a/src/main/java/nl/tudelft/submit/service/EditionService.java b/src/main/java/nl/tudelft/submit/service/EditionService.java
index 065cdc3451ddd0a2e8b949a9a2211b8950ea85ed..82bd1ca7e32d62b07f7bb6fa5e884294edca59d1 100644
--- a/src/main/java/nl/tudelft/submit/service/EditionService.java
+++ b/src/main/java/nl/tudelft/submit/service/EditionService.java
@@ -200,7 +200,7 @@ public class EditionService {
 	 * @param person The person to add
 	 */
 	public void addUser(Long id, Person person) {
-		editionApi.addStudentsToEdition(id, List.of(person.getUsername()), false).block();
+		editionApi.addStudentsToEdition(List.of(person.getUsername()), id, false).block();
 
 		String editionName = editionCache.getOrThrow(id).getName();
 		NotificationPreference pref = userSettingsService
@@ -230,7 +230,7 @@ public class EditionService {
 	 * @param role     The role to give the user
 	 */
 	public void addRole(Long id, Long personId, String username, RolePatchDTO.TypeEnum role) {
-		editionApi.addStudentsToEdition(id, List.of(username), false).block();
+		editionApi.addStudentsToEdition(List.of(username), id, false).block();
 		roleService.patchRole(personId, id, new RolePatchDTO().type(role));
 	}
 
@@ -241,7 +241,7 @@ public class EditionService {
 	 * @param usernames The list of usernames
 	 */
 	public void addUsers(Long id, List<String> usernames) {
-		editionApi.addStudentsToEdition(id, usernames, false).block();
+		editionApi.addStudentsToEdition(usernames, id, false).block();
 	}
 
 	/**
@@ -351,7 +351,7 @@ public class EditionService {
 	 */
 	public Long patchEdition(Long id, SubmitEditionPatchDTO patch) {
 		editionRepository.save(patch.apply(getOrCreateSubmitEdition(id)));
-		return editionApi.patchEdition(id, mapper.map(patch, EditionPatchDTO.class)).block();
+		return editionApi.patchEdition(mapper.map(patch, EditionPatchDTO.class), id).block();
 	}
 
 	/**
@@ -460,7 +460,7 @@ public class EditionService {
 			roles.put(username, ParticipantsImportDTO.InnerEnum.valueOf(role));
 		}
 		if (!roles.isEmpty()) {
-			editionApi.addParticipantsToEdition(id, new ParticipantsImportDTO().participants(roles), false)
+			editionApi.addParticipantsToEdition(new ParticipantsImportDTO().participants(roles), id, false)
 					.block();
 		}
 	}
diff --git a/src/main/java/nl/tudelft/submit/service/ModuleDivisionService.java b/src/main/java/nl/tudelft/submit/service/ModuleDivisionService.java
index 85afb859d809af67a02c9e8865a3dbc531d2cb30..05c9151158ed9e89a1f2ef392a812276ca0a5da6 100644
--- a/src/main/java/nl/tudelft/submit/service/ModuleDivisionService.java
+++ b/src/main/java/nl/tudelft/submit/service/ModuleDivisionService.java
@@ -72,7 +72,7 @@ public class ModuleDivisionService {
 	 * @param dto      the dto which holds the division of people
 	 */
 	public void importDivisions(Long moduleId, ModuleDivisionImportDTO dto) {
-		divisionApi.importDivisions(moduleId, dto.getDivisions(), false).block();
+		divisionApi.importDivisions(dto.getDivisions(), moduleId, false).block();
 	}
 
 	/**
@@ -97,7 +97,7 @@ public class ModuleDivisionService {
 				.map(d -> new ModuleDivisionCreateDTO().usernames(d.getPeople().stream()
 						.map(PersonSummaryDTO::getUsername).collect(Collectors.toList())))
 				.collect(Collectors.toList());
-		divisionApi.importDivisions(to, createDTOs, false).block();
+		divisionApi.importDivisions(createDTOs, to, false).block();
 	}
 
 	/**
@@ -118,7 +118,7 @@ public class ModuleDivisionService {
 	 * @param username the username of the person to add
 	 */
 	public void addPersonToDivision(Long id, String username) {
-		divisionApi.addPersonToDivision(id, username, false).block();
+		divisionApi.addPersonToDivision(username, id, false).block();
 	}
 
 	/**
@@ -128,7 +128,7 @@ public class ModuleDivisionService {
 	 * @param username the username of the person to add
 	 */
 	public void addPersonToRandomDivision(Long moduleId, String username) {
-		divisionApi.addPersonToRandomDivision(moduleId, username, false).block();
+		divisionApi.addPersonToRandomDivision(username, moduleId, false).block();
 	}
 
 	/**
@@ -141,7 +141,7 @@ public class ModuleDivisionService {
 				.getStudents(moduleService.getModuleById(moduleId).getEdition().getId()).stream()
 				.map(r -> r.getPerson().getUsername()).collect(Collectors.toList());
 		divisionApi
-				.importDivisions(moduleId, List.of(new ModuleDivisionCreateDTO().usernames(students)), false)
+				.importDivisions(List.of(new ModuleDivisionCreateDTO().usernames(students)), moduleId, false)
 				.block();
 	}
 
diff --git a/src/main/java/nl/tudelft/submit/service/ModuleService.java b/src/main/java/nl/tudelft/submit/service/ModuleService.java
index f7b8214338f4769799947370bb070f0b2339cf00..823158b5e031c14b77d6a9aa32e216205783bfcf 100644
--- a/src/main/java/nl/tudelft/submit/service/ModuleService.java
+++ b/src/main/java/nl/tudelft/submit/service/ModuleService.java
@@ -125,7 +125,7 @@ public class ModuleService {
 	 * @param modulePatch The module containing all changed information.
 	 */
 	public void patchModule(Long id, ModulePatchDTO modulePatch) {
-		moduleApi.patchModule(id, modulePatch).block();
+		moduleApi.patchModule(modulePatch, id).block();
 	}
 
 	/**
diff --git a/src/main/java/nl/tudelft/submit/service/RoleService.java b/src/main/java/nl/tudelft/submit/service/RoleService.java
index 9aa4552cc49fa9580ef59462823960cf554c029e..b943a49bb429e98cada4a3acff3856339cf91136 100644
--- a/src/main/java/nl/tudelft/submit/service/RoleService.java
+++ b/src/main/java/nl/tudelft/submit/service/RoleService.java
@@ -130,7 +130,7 @@ public class RoleService {
 	 * @return              The id of the role that was patched.
 	 */
 	public Id patchRole(Long personId, Long editionId, RolePatchDTO rolePatchDTO) {
-		return roleApi.patchRole(personId, editionId, rolePatchDTO).block();
+		return roleApi.patchRole(rolePatchDTO, personId, editionId).block();
 	}
 
 }
diff --git a/src/main/java/nl/tudelft/submit/service/ScriptService.java b/src/main/java/nl/tudelft/submit/service/ScriptService.java
index f326e5477ab0c3c96419071f1ab613c709867be9..cad2b97c3e54675a48f74a50e8f52223285e8db5 100644
--- a/src/main/java/nl/tudelft/submit/service/ScriptService.java
+++ b/src/main/java/nl/tudelft/submit/service/ScriptService.java
@@ -268,7 +268,7 @@ public class ScriptService {
 	}
 
 	private void sendUpdateNotification(Long submissionId, Long gradeId) {
-		SubmissionDetailsDTO submission = submissionApi.getAllSubmissionsById(List.of(submissionId))
+		SubmissionDetailsDTO submission = submissionApi.getAllSubmissionsById(Set.of(submissionId))
 				.blockFirst();
 		GradeSummaryDTO grade = gradeService.getRelevantGrade(List.of(submission))
 				.filter(g -> g.getId().equals(gradeId)).orElse(null);
diff --git a/src/main/java/nl/tudelft/submit/service/StudentGroupService.java b/src/main/java/nl/tudelft/submit/service/StudentGroupService.java
index 3abd5e85be451cf09e0c4a0ba5d29bf676e4d26e..b9b49438bd5bc39166090ca7a22d837f5fbccaa0 100644
--- a/src/main/java/nl/tudelft/submit/service/StudentGroupService.java
+++ b/src/main/java/nl/tudelft/submit/service/StudentGroupService.java
@@ -190,7 +190,7 @@ public class StudentGroupService {
 	 * @param dto the dto with the patches
 	 */
 	public void patchGroup(Long id, StudentGroupPatchDTO dto) {
-		groupApi.patchGroup(id, dto).block();
+		groupApi.patchGroup(dto, id).block();
 	}
 
 	/**
@@ -200,7 +200,7 @@ public class StudentGroupService {
 	 * @param dto      the parameters (amount and capacity)
 	 */
 	public void generateGroupsForModule(Long moduleId, GroupGenerateDTO dto) {
-		groupApi.generateGroupsForModule(moduleId, dto).block();
+		groupApi.generateGroupsForModule(dto, moduleId).block();
 	}
 
 	/**
@@ -210,7 +210,7 @@ public class StudentGroupService {
 	 * @param capacity the capacity the groups should have
 	 */
 	public void allocateGroupsForModuleParticipants(Long moduleId, Integer capacity) {
-		groupApi.allocateGroupsForModule(moduleId, capacity).block();
+		groupApi.allocateGroupsForModule(capacity, moduleId).block();
 	}
 
 	/**
diff --git a/src/main/java/nl/tudelft/submit/service/SubmissionService.java b/src/main/java/nl/tudelft/submit/service/SubmissionService.java
index 0905dd75aac90fb6f8f9b337148eeff7425bb6ea..2548ea2681e94505d71a14848de957f3f2f8cbd6 100644
--- a/src/main/java/nl/tudelft/submit/service/SubmissionService.java
+++ b/src/main/java/nl/tudelft/submit/service/SubmissionService.java
@@ -296,7 +296,7 @@ public class SubmissionService {
 	 * @param allowedFileTypes The allowed file types for assignment for which the submission is made
 	 * @param fileMap          The map of the files the user is trying to upload
 	 */
-	public boolean checkSubmission(List<String> allowedFileTypes, Map<String, MultipartFile> fileMap) {
+	public boolean checkSubmission(Set<String> allowedFileTypes, Map<String, MultipartFile> fileMap) {
 		for (MultipartFile file : fileMap.values()) {
 			if (!allowedFileTypes.isEmpty() && allowedFileTypes.stream()
 					.noneMatch(ext -> file.getResource().getFilename().endsWith(ext))) {
diff --git a/src/test/java/nl/tudelft/submit/controller/SubmissionControllerTest.java b/src/test/java/nl/tudelft/submit/controller/SubmissionControllerTest.java
index b04e9d882a705992903dd1a04e0b9f1d8816fb5e..3c264e54e0e16f0ef636d4993032b1bdfb2a0883 100644
--- a/src/test/java/nl/tudelft/submit/controller/SubmissionControllerTest.java
+++ b/src/test/java/nl/tudelft/submit/controller/SubmissionControllerTest.java
@@ -79,9 +79,9 @@ class SubmissionControllerTest {
 	private static final AssignmentSummaryDTO ASSIGNMENT_SUMMARY_DTO = new AssignmentSummaryDTO()
 			.id(ASSIGNMENT_ID);
 	private static final AssignmentDetailsDTO ASSIGNMENT_DETAILS_DTO = new AssignmentDetailsDTO()
-			.id(ASSIGNMENT_ID).module(new ModuleSummaryDTO().id(MODULE_ID)).allowedFileTypes(List.of(".txt"));
+			.id(ASSIGNMENT_ID).module(new ModuleSummaryDTO().id(MODULE_ID)).allowedFileTypes(Set.of(".txt"));
 	private static final AssignmentModuleDetailsDTO ASSIGNMENT_MODULE_DETAILS_DTO = new AssignmentModuleDetailsDTO()
-			.id(ASSIGNMENT_ID).module(new ModuleLayer1DTO().id(MODULE_ID)).allowedFileTypes(List.of(".txt"));
+			.id(ASSIGNMENT_ID).module(new ModuleLayer1DTO().id(MODULE_ID)).allowedFileTypes(Set.of(".txt"));
 	private static final SubmissionSummaryDTO SUB_VIEW_DTO = new SubmissionSummaryDTO().id(111L);
 	private static final SubmissionMemberDetailsDTO SUB_DETAILED_MEM_VIEW_DTO = new SubmissionMemberDetailsDTO()
 			.id(777L)
@@ -141,7 +141,7 @@ class SubmissionControllerTest {
 		when(authService.canSubmitAssignment(anyLong(), anyLong())).thenReturn(true);
 		when(submissionService.addSubmission(SUB_CREATE_DTO)).thenReturn(SUBMISSION_ID);
 		when(submissionService.canMakeSubmission(anyLong(), anyLong())).thenReturn(true);
-		when(submissionService.checkSubmission(anyList(), any())).thenReturn(true);
+		when(submissionService.checkSubmission(anySet(), any())).thenReturn(true);
 		when(userSettingsService.getOrCreateUserSettings(any())).thenReturn(settings);
 		when(assignmentService.getAssignmentDetails(anyLong())).thenReturn(ASSIGNMENT_DETAILS_DTO);
 		when(groupService.getGroupForPersonInModule(anyLong(), anyLong()))
@@ -169,7 +169,7 @@ class SubmissionControllerTest {
 		when(authService.canSubmitAssignment(anyLong(), anyLong())).thenReturn(true);
 		when(submissionService.addSubmission(SUB_CREATE_DTO)).thenReturn(SUBMISSION_ID);
 		when(submissionService.canMakeSubmission(anyLong(), anyLong())).thenReturn(true);
-		when(submissionService.checkSubmission(anyList(), any())).thenReturn(true);
+		when(submissionService.checkSubmission(anySet(), any())).thenReturn(true);
 		when(assignmentService.getAssignmentDetails(anyLong())).thenReturn(ASSIGNMENT_DETAILS_DTO);
 		when(groupService.getGroupForPersonInModule(anyLong(), anyLong()))
 				.thenReturn(Optional.ofNullable(new StudentGroupDetailsDTO().id(GROUP_ID)));
@@ -209,7 +209,7 @@ class SubmissionControllerTest {
 		when(authService.canSubmitAssignment(anyLong(), anyLong())).thenReturn(true);
 		when(submissionService.addSubmission(SUB_CREATE_DTO)).thenReturn(SUBMISSION_ID);
 		when(submissionService.canMakeSubmission(anyLong(), anyLong())).thenReturn(true);
-		when(submissionService.checkSubmission(anyList(), any())).thenCallRealMethod();
+		when(submissionService.checkSubmission(anySet(), any())).thenCallRealMethod();
 		when(assignmentService.getAssignmentDetails(anyLong())).thenReturn(ASSIGNMENT_DETAILS_DTO);
 		when(groupService.getGroupForPersonInModule(anyLong(), anyLong()))
 				.thenReturn(Optional.ofNullable(new StudentGroupDetailsDTO().id(GROUP_ID)));
diff --git a/src/test/java/nl/tudelft/submit/service/AssignmentServiceTest.java b/src/test/java/nl/tudelft/submit/service/AssignmentServiceTest.java
index a4f282cfd80112fb95e8707860134230c2796460..14ee4dcf45d1536d434c6989cf1d797b0a83219c 100644
--- a/src/test/java/nl/tudelft/submit/service/AssignmentServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/AssignmentServiceTest.java
@@ -19,6 +19,7 @@ package nl.tudelft.submit.service;
 
 import static java.time.LocalDateTime.now;
 import static java.util.Collections.emptyList;
+import static java.util.Collections.emptySet;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.*;
 
@@ -183,30 +184,30 @@ class AssignmentServiceTest {
 	void patchAssignment() {
 		SubmitAssignmentPatchDTO patch = new SubmitAssignmentPatchDTO();
 
-		when(assignmentApi.patchAssignment(anyLong(), any(AssignmentPatchDTO.class)))
+		when(assignmentApi.patchAssignment(any(AssignmentPatchDTO.class), anyLong()))
 				.thenReturn(Mono.just(ASSIGNMENT_ID));
 
 		assertThat(assignmentService.patchAssignment(ASSIGNMENT_ID, patch)).isEqualTo(ASSIGNMENT_ID);
 
-		verify(assignmentApi).patchAssignment(ASSIGNMENT_ID,
-				new AssignmentPatchDTO().acceptLateSubmissions(false)
-						.allowedFileTypes(emptyList()));
+		verify(assignmentApi).patchAssignment(
+				new AssignmentPatchDTO().acceptLateSubmissions(false).allowedFileTypes(emptySet()),
+				ASSIGNMENT_ID);
 	}
 
 	@Test
 	void patchAssignmentWithTrain() {
 		SubmitAssignmentPatchDTO patch = new SubmitAssignmentPatchDTO();
 
-		when(assignmentApi.patchAssignment(anyLong(), any(AssignmentPatchDTO.class)))
+		when(assignmentApi.patchAssignment(any(AssignmentPatchDTO.class), anyLong()))
 				.thenReturn(Mono.just(ASSIGNMENT_ID));
 		when(versionService.getVersionsPerAssignment(anyLong())).thenReturn(List.of(VersionViewDTO.builder()
 				.name("_unit").build()));
 
 		assertThat(assignmentService.patchAssignment(ASSIGNMENT_ID, patch)).isEqualTo(ASSIGNMENT_ID);
 
-		verify(assignmentApi).patchAssignment(ASSIGNMENT_ID,
-				new AssignmentPatchDTO().acceptLateSubmissions(false)
-						.allowedFileTypes(emptyList()));
+		verify(assignmentApi).patchAssignment(
+				new AssignmentPatchDTO().acceptLateSubmissions(false).allowedFileTypes(emptySet()),
+				ASSIGNMENT_ID);
 		verify(versionService).patchUnitVersion(ASSIGNMENT_ID, patch);
 	}
 
@@ -330,12 +331,12 @@ class AssignmentServiceTest {
 						.hasHeaders(true).idColumn(0)
 						.idType(GradeImportIdType.USERNAME).build());
 
-		verify(gradeApi, never()).importGrades(anyLong(), any());
+		verify(gradeApi, never()).importGrades(any(), anyLong());
 	}
 
 	@Test
 	public void importGrades() throws IOException, CsvValidationException {
-		when(gradeApi.importGrades(anyLong(), any())).thenReturn(Mono.empty());
+		when(gradeApi.importGrades(any(), anyLong())).thenReturn(Mono.empty());
 
 		assignmentService.importGrades(ASSIGNMENT_ID,
 				new StringReader("username;grade\ntestuser1;3.0\ntestuser2;9.1"),
@@ -344,7 +345,7 @@ class AssignmentServiceTest {
 
 		ArgumentCaptor<GradeBatchImportDTO> argumentCaptor = ArgumentCaptor
 				.forClass(GradeBatchImportDTO.class);
-		verify(gradeApi).importGrades(eq(ASSIGNMENT_ID), argumentCaptor.capture());
+		verify(gradeApi).importGrades(argumentCaptor.capture(), eq(ASSIGNMENT_ID));
 
 		GradeBatchImportDTO dto = argumentCaptor.getValue();
 		assertThat(dto.getGrades().get(0).getGradeeId()).isEqualTo("testuser1");
diff --git a/src/test/java/nl/tudelft/submit/service/EditionServiceTest.java b/src/test/java/nl/tudelft/submit/service/EditionServiceTest.java
index 4c72aec8455bf738b46a5e0b27f04c7c18696eb5..f00a8e0e070cdf46dc6c96a7e9990de55dbfec66 100644
--- a/src/test/java/nl/tudelft/submit/service/EditionServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/EditionServiceTest.java
@@ -120,25 +120,25 @@ public class EditionServiceTest {
 	public void testAddUser() {
 		when(editionCache.getOrThrow(anyLong()))
 				.thenReturn(new EditionDetailsDTO().name("test edition"));
-		when(editionApi.addStudentsToEdition(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(editionApi.addStudentsToEdition(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 		when(userSettingsService.getOrCreateUserSettings(any()))
 				.thenReturn(UserSettings.builder().onAddedToCourse(NotificationPreference.NONE).build());
 
 		editionService.addUser(EDITION_ID,
 				Person.builder().username("testuser").email("").id(PERSON_ID).build());
 
-		verify(editionApi).addStudentsToEdition(EDITION_ID, List.of("testuser"), false);
+		verify(editionApi).addStudentsToEdition(List.of("testuser"), EDITION_ID, false);
 	}
 
 	@Test
 	public void testAddUsers() {
-		when(editionApi.addStudentsToEdition(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(editionApi.addStudentsToEdition(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		List<String> usernames = List.of("testuser1", "testuser2");
 
 		editionService.addUsers(EDITION_ID, usernames);
 
-		verify(editionApi).addStudentsToEdition(EDITION_ID, usernames, false);
+		verify(editionApi).addStudentsToEdition(usernames, EDITION_ID, false);
 	}
 
 	@Test
@@ -208,12 +208,12 @@ public class EditionServiceTest {
 	public void testPatchEdition() {
 		SubmitEditionPatchDTO patch = new SubmitEditionPatchDTO();
 
-		when(editionApi.patchEdition(eq(EDITION_ID), any(EditionPatchDTO.class)))
+		when(editionApi.patchEdition(any(EditionPatchDTO.class), eq(EDITION_ID)))
 				.thenReturn(Mono.just(EDITION_ID));
 
 		assertThat(editionService.patchEdition(EDITION_ID, patch)).isEqualTo(EDITION_ID);
 
-		verify(editionApi).patchEdition(EDITION_ID, new EditionPatchDTO());
+		verify(editionApi).patchEdition(new EditionPatchDTO(), EDITION_ID);
 	}
 
 	@Test
@@ -421,12 +421,12 @@ public class EditionServiceTest {
 						.hasHeaders(true).idColumn(0)
 						.build());
 
-		verify(editionApi, never()).addParticipantsToEdition(anyLong(), any(), anyBoolean());
+		verify(editionApi, never()).addParticipantsToEdition(any(), anyLong(), anyBoolean());
 	}
 
 	@Test
 	public void importGrades() throws IOException, CsvValidationException {
-		when(editionApi.addParticipantsToEdition(anyLong(), any(), anyBoolean())).thenReturn(Mono.empty());
+		when(editionApi.addParticipantsToEdition(any(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		editionService.importParticipants(EDITION_ID,
 				new StringReader("username;role\ntestuser1;STUDENT\ntestuser2;TEACHER"),
@@ -435,7 +435,7 @@ public class EditionServiceTest {
 
 		ArgumentCaptor<ParticipantsImportDTO> argumentCaptor = ArgumentCaptor
 				.forClass(ParticipantsImportDTO.class);
-		verify(editionApi).addParticipantsToEdition(eq(EDITION_ID), argumentCaptor.capture(), anyBoolean());
+		verify(editionApi).addParticipantsToEdition(argumentCaptor.capture(), eq(EDITION_ID), anyBoolean());
 
 		ParticipantsImportDTO dto = argumentCaptor.getValue();
 		assertThat(dto.getParticipants().get("testuser1")).isEqualTo(ParticipantsImportDTO.InnerEnum.STUDENT);
diff --git a/src/test/java/nl/tudelft/submit/service/ExportServiceTest.java b/src/test/java/nl/tudelft/submit/service/ExportServiceTest.java
index 7c4d979ebcc1e1aead66fc9036bec9d17a7c673f..3ffd76a1755f0c7ce5d88cbcf2e96c50efcf18a9 100644
--- a/src/test/java/nl/tudelft/submit/service/ExportServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/ExportServiceTest.java
@@ -192,7 +192,7 @@ class ExportServiceTest {
 								.assignment(
 										new AssignmentSummaryDTO().id(ASSIGNMENT_ID + 1).name("assignment2"))
 								.submitter(new PersonSummaryDTO().id(PERSON_ID).username("user1"))
-								.grades(Collections.emptyList())));
+								.grades(Collections.emptySet())));
 		when(submissionService.getAllSubmissionsForModule(MODULE_ID + 1)).thenReturn(Collections.emptyList());
 
 		when(feedbackService.getFeedbackByGrade(GRADE_ID)).thenReturn(Collections.emptyList());
diff --git a/src/test/java/nl/tudelft/submit/service/ModuleDivisionServiceTest.java b/src/test/java/nl/tudelft/submit/service/ModuleDivisionServiceTest.java
index 74fd3927219ce868a77bdcb1e86773dc1334b1d4..eb03e8913c2f7646766b48d09f3015657bcf2331 100644
--- a/src/test/java/nl/tudelft/submit/service/ModuleDivisionServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/ModuleDivisionServiceTest.java
@@ -93,16 +93,16 @@ class ModuleDivisionServiceTest {
 	void importDivisions() {
 		List<ModuleDivisionCreateDTO> creates = new ArrayList<>();
 		ModuleDivisionImportDTO dto = new ModuleDivisionImportDTO(creates);
-		when(divisionApi.importDivisions(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(divisionApi.importDivisions(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		divisionService.importDivisions(MODULE_ID, dto);
 
-		verify(divisionApi).importDivisions(MODULE_ID, creates, false);
+		verify(divisionApi).importDivisions(creates, MODULE_ID, false);
 	}
 
 	@Test
 	void generateOneDivision() {
-		when(divisionApi.importDivisions(anyLong(), anyList(), anyBoolean()))
+		when(divisionApi.importDivisions(anyList(), anyLong(), anyBoolean()))
 				.thenReturn(Mono.empty());
 		when(editionService.getStudents(anyLong()))
 				.thenReturn(List
@@ -112,8 +112,7 @@ class ModuleDivisionServiceTest {
 
 		divisionService.generateOneDivision(MODULE_ID);
 
-		verify(divisionApi).importDivisions(MODULE_ID,
-				List.of(new ModuleDivisionCreateDTO().usernames(List.of("test user"))), false);
+		verify(divisionApi).importDivisions(List.of(new ModuleDivisionCreateDTO().usernames(List.of("test user"))), MODULE_ID, false);
 	}
 
 	@Test
@@ -134,13 +133,13 @@ class ModuleDivisionServiceTest {
 						new PersonSummaryDTO().username("A2"))),
 				new ModuleDivisionDetailsDTO().people(List.of(
 						new PersonSummaryDTO().username("B1")))));
-		when(divisionApi.importDivisions(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(divisionApi.importDivisions(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		divisionService.importDivisionsFromModule(123L, MODULE_ID);
 
-		verify(divisionApi).importDivisions(MODULE_ID, List.of(
+		verify(divisionApi).importDivisions(List.of(
 				new ModuleDivisionCreateDTO().usernames(List.of("A1", "A2")),
-				new ModuleDivisionCreateDTO().usernames(List.of("B1"))), false);
+				new ModuleDivisionCreateDTO().usernames(List.of("B1"))), MODULE_ID, false);
 	}
 
 	@Test
@@ -156,22 +155,22 @@ class ModuleDivisionServiceTest {
 
 	@Test
 	void addPersonToDivision() {
-		when(divisionApi.addPersonToDivision(anyLong(), anyString(), anyBoolean()))
+		when(divisionApi.addPersonToDivision(anyString(), anyLong(), anyBoolean()))
 				.thenReturn(Mono.empty());
 
 		divisionService.addPersonToDivision(DIVISION_ID, USERNAME);
 
-		verify(divisionApi).addPersonToDivision(DIVISION_ID, USERNAME, false);
+		verify(divisionApi).addPersonToDivision(USERNAME, DIVISION_ID, false);
 	}
 
 	@Test
 	void addPersonToRandomDivision() {
-		when(divisionApi.addPersonToRandomDivision(anyLong(), anyString(), anyBoolean()))
+		when(divisionApi.addPersonToRandomDivision(anyString(), anyLong(), anyBoolean()))
 				.thenReturn(Mono.empty());
 
 		divisionService.addPersonToRandomDivision(MODULE_ID, USERNAME);
 
-		verify(divisionApi).addPersonToRandomDivision(MODULE_ID, USERNAME, false);
+		verify(divisionApi).addPersonToRandomDivision(USERNAME, MODULE_ID, false);
 	}
 
 	@ParameterizedTest
@@ -193,14 +192,14 @@ class ModuleDivisionServiceTest {
 		when(moduleService.getModuleById(anyLong()))
 				.thenReturn(new ModuleDetailsDTO().edition(new EditionSummaryDTO().id(1L)));
 
-		when(divisionApi.importDivisions(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(divisionApi.importDivisions(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		List<ModuleDivisionCreateDTO> divs = List.of(new ModuleDivisionCreateDTO()
 				.usernames(List.of(str1, str2, str3)));
 
 		divisionService.generateDivisions(MODULE_ID, DivisionsGenerateType.NUMBER_OF_DIVISIONS, order, 1);
 
-		verify(divisionApi, times(1)).importDivisions(MODULE_ID, divs, false);
+		verify(divisionApi, times(1)).importDivisions(divs, MODULE_ID, false);
 	}
 
 	@Test
@@ -216,7 +215,7 @@ class ModuleDivisionServiceTest {
 		when(moduleService.getModuleById(anyLong()))
 				.thenReturn(new ModuleDetailsDTO().edition(new EditionSummaryDTO().id(1L)));
 
-		when(divisionApi.importDivisions(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(divisionApi.importDivisions(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		List<ModuleDivisionCreateDTO> divs = List.of(new ModuleDivisionCreateDTO()
 				.usernames(namelist));
@@ -224,8 +223,8 @@ class ModuleDivisionServiceTest {
 		divisionService.generateDivisions(MODULE_ID, DivisionsGenerateType.NUMBER_OF_DIVISIONS,
 				DivisionsGenerateOrder.RANDOM, 1);
 
-		verify(divisionApi, never()).importDivisions(MODULE_ID, divs, false);
-		verify(divisionApi).importDivisions(eq(MODULE_ID), any(List.class), anyBoolean());
+		verify(divisionApi, never()).importDivisions(divs, MODULE_ID, false);
+		verify(divisionApi).importDivisions(anyList(), eq(MODULE_ID), anyBoolean());
 	}
 
 	@Test
@@ -241,7 +240,7 @@ class ModuleDivisionServiceTest {
 		when(moduleService.getModuleById(anyLong()))
 				.thenReturn(new ModuleDetailsDTO().edition(new EditionSummaryDTO().id(1L)));
 
-		when(divisionApi.importDivisions(anyLong(), anyList(), anyBoolean())).thenReturn(Mono.empty());
+		when(divisionApi.importDivisions(anyList(), anyLong(), anyBoolean())).thenReturn(Mono.empty());
 
 		List<ModuleDivisionCreateDTO> divs = List.of(
 				new ModuleDivisionCreateDTO().usernames(List.of("user-1", "user-2")),
@@ -251,6 +250,6 @@ class ModuleDivisionServiceTest {
 		divisionService.generateDivisions(MODULE_ID, DivisionsGenerateType.DIVISION_CAPACITY,
 				DivisionsGenerateOrder.USERNAME, 2);
 
-		verify(divisionApi).importDivisions(MODULE_ID, divs, false);
+		verify(divisionApi).importDivisions(divs, MODULE_ID, false);
 	}
 }
diff --git a/src/test/java/nl/tudelft/submit/service/ModuleServiceTest.java b/src/test/java/nl/tudelft/submit/service/ModuleServiceTest.java
index bd488342163c22b7e85474a9aadde8b4d527712e..cba941cd5320e148eaf29dd405d3da1063c7037d 100644
--- a/src/test/java/nl/tudelft/submit/service/ModuleServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/ModuleServiceTest.java
@@ -129,22 +129,22 @@ class ModuleServiceTest {
 		dto.setName("Test Module");
 		Mono<Long> mono = Mono.just(MODULE_ID);
 
-		Mockito.when(moduleApi.patchModule(MODULE_ID, dto)).thenReturn(mono);
+		Mockito.when(moduleApi.patchModule(dto, MODULE_ID)).thenReturn(mono);
 
 		moduleService.patchModule(MODULE_ID, dto);
 
-		Mockito.verify(moduleApi).patchModule(MODULE_ID, dto);
+		Mockito.verify(moduleApi).patchModule(dto, MODULE_ID);
 	}
 
 	@Test
 	void patchModuleWithDivision() {
-		when(moduleApi.patchModule(anyLong(), any(ModulePatchDTO.class))).thenReturn(Mono.empty());
+		when(moduleApi.patchModule(any(ModulePatchDTO.class), anyLong())).thenReturn(Mono.empty());
 
 		ModulePatchDTO module = new ModulePatchDTO().name("Name");
 
 		moduleService.patchModuleWithDivisions(MODULE_ID, module);
 
-		verify(moduleApi).patchModule(eq(MODULE_ID), any(ModulePatchDTO.class));
+		verify(moduleApi).patchModule(any(ModulePatchDTO.class), eq(MODULE_ID));
 	}
 
 	@Test
diff --git a/src/test/java/nl/tudelft/submit/service/RoleServiceTest.java b/src/test/java/nl/tudelft/submit/service/RoleServiceTest.java
index 64539c73d350ba4cd3a5c51cad69c4f387a4edd0..4ab3b7aacae99e34160f6f72dc0ea554f5e8ae8a 100644
--- a/src/test/java/nl/tudelft/submit/service/RoleServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/RoleServiceTest.java
@@ -164,12 +164,12 @@ class RoleServiceTest {
 	void testPatchRole() {
 		RolePatchDTO patch = new RolePatchDTO();
 
-		when(roleApi.patchRole(anyLong(), anyLong(), any(RolePatchDTO.class)))
+		when(roleApi.patchRole(any(RolePatchDTO.class), anyLong(), anyLong()))
 				.thenReturn(Mono.just(ROLE_ID_1));
 
 		assertThat(service.patchRole(PERSON_ID_1, EDITION_ID, patch)).isEqualTo(ROLE_ID_1);
 
-		verify(roleApi).patchRole(PERSON_ID_1, EDITION_ID, patch); // gives unassigned mono instance
+		verify(roleApi).patchRole(patch, PERSON_ID_1, EDITION_ID); // gives unassigned mono instance
 	}
 
 }
diff --git a/src/test/java/nl/tudelft/submit/service/StudentGroupServiceTest.java b/src/test/java/nl/tudelft/submit/service/StudentGroupServiceTest.java
index bd56694d3426be910e474a0717e53768a7ee0e20..b354b69d675822934fa830048327b067e75bfe6c 100644
--- a/src/test/java/nl/tudelft/submit/service/StudentGroupServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/StudentGroupServiceTest.java
@@ -169,33 +169,33 @@ class StudentGroupServiceTest {
 	@Test
 	void patchGroup() {
 		StudentGroupPatchDTO dto = new StudentGroupPatchDTO();
-		Mockito.when(groupApi.patchGroup(anyLong(), any(StudentGroupPatchDTO.class)))
+		Mockito.when(groupApi.patchGroup(any(StudentGroupPatchDTO.class), anyLong()))
 				.thenReturn(Mono.empty());
 
 		groupService.patchGroup(GROUP_ID, dto);
 
-		Mockito.verify(groupApi).patchGroup(GROUP_ID, dto);
+		Mockito.verify(groupApi).patchGroup(dto, GROUP_ID);
 	}
 
 	@Test
 	void generateGroups() {
 		GroupGenerateDTO dto = new GroupGenerateDTO();
-		Mockito.when(groupApi.generateGroupsForModule(anyLong(), any(GroupGenerateDTO.class)))
+		Mockito.when(groupApi.generateGroupsForModule(any(GroupGenerateDTO.class), anyLong()))
 				.thenReturn(Mono.empty());
 
 		groupService.generateGroupsForModule(GROUP_ID, dto);
 
-		Mockito.verify(groupApi).generateGroupsForModule(GROUP_ID, dto);
+		Mockito.verify(groupApi).generateGroupsForModule(dto, GROUP_ID);
 	}
 
 	@Test
 	void allocateGroups() {
 		Integer capacity = 6;
-		Mockito.when(groupApi.allocateGroupsForModule(anyLong(), anyInt())).thenReturn(Mono.empty());
+		Mockito.when(groupApi.allocateGroupsForModule(anyInt(), anyLong())).thenReturn(Mono.empty());
 
 		groupService.allocateGroupsForModuleParticipants(GROUP_ID, capacity);
 
-		Mockito.verify(groupApi).allocateGroupsForModule(GROUP_ID, capacity);
+		Mockito.verify(groupApi).allocateGroupsForModule(capacity, GROUP_ID);
 	}
 
 	@Test
@@ -283,16 +283,16 @@ class StudentGroupServiceTest {
 				new StudentGroupSummaryDTO().id(1L).capacity(6),
 				new StudentGroupSummaryDTO().id(2L).capacity(4),
 				new StudentGroupSummaryDTO().id(3L).capacity(2));
-		when(groupApi.patchGroup(anyLong(), any(StudentGroupPatchDTO.class)))
+		when(groupApi.patchGroup(any(StudentGroupPatchDTO.class), anyLong()))
 				.thenReturn(Mono.empty());
 		when(groupApi.getAllGroupsInModule(MODULE_ID)).thenReturn(Flux.fromIterable(groups));
 
 		groupService.changeCapacities(MODULE_ID, newCapacity);
 
 		verify(groupApi, times(3)).patchGroup(any(), any());
-		verify(groupApi).patchGroup(1L, new StudentGroupPatchDTO().capacity(newCapacity));
-		verify(groupApi).patchGroup(2L, new StudentGroupPatchDTO().capacity(newCapacity));
-		verify(groupApi).patchGroup(3L, new StudentGroupPatchDTO().capacity(newCapacity));
+		verify(groupApi).patchGroup(new StudentGroupPatchDTO().capacity(newCapacity), 1L);
+		verify(groupApi).patchGroup(new StudentGroupPatchDTO().capacity(newCapacity), 2L);
+		verify(groupApi).patchGroup(new StudentGroupPatchDTO().capacity(newCapacity), 3L);
 	}
 
 	@Test
diff --git a/src/test/java/nl/tudelft/submit/service/grading/GradeServiceTest.java b/src/test/java/nl/tudelft/submit/service/grading/GradeServiceTest.java
index cf77edca53a8ddfaefc678798073f83c1f4a8030..feb17eb0ad41dbe7c0eca685585d1643acce0b16 100644
--- a/src/test/java/nl/tudelft/submit/service/grading/GradeServiceTest.java
+++ b/src/test/java/nl/tudelft/submit/service/grading/GradeServiceTest.java
@@ -17,8 +17,7 @@
  */
 package nl.tudelft.submit.service.grading;
 
-import static java.util.Collections.emptyList;
-import static java.util.Collections.emptyMap;
+import static java.util.Collections.*;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.ArgumentMatchers.any;
@@ -27,10 +26,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.time.LocalDateTime;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 
 import javax.transaction.Transactional;
 
@@ -410,16 +406,16 @@ public class GradeServiceTest {
 	@Test
 	public void getRelevantGradeReturnsNoneWhenNoGrades() {
 		assertThat(gradeService.getRelevantGrade(List.of(new SubmissionDetailsDTO()
-				.submissionTime(LocalDateTime.now()).grades(Collections.emptyList())))).isEmpty();
+				.submissionTime(LocalDateTime.now()).grades(Collections.emptySet())))).isEmpty();
 	}
 
 	@Test
 	public void getRelevantGradeReturnsMaxOfLatestSubmission() {
 		assertThat(gradeService.getRelevantGrade(List.of(
 				new SubmissionDetailsDTO().submissionTime(LocalDateTime.of(2020, 1, 1, 0, 0))
-						.grades(List.of(new GradeSummaryDTO().score(10).isScriptGraded(false))),
+						.grades(Set.of(new GradeSummaryDTO().score(10).isScriptGraded(false))),
 				new SubmissionDetailsDTO().submissionTime(LocalDateTime.of(2020, 1, 2, 0, 0))
-						.grades(List.of(new GradeSummaryDTO().score(2).isScriptGraded(false),
+						.grades(Set.of(new GradeSummaryDTO().score(2).isScriptGraded(false),
 								new GradeSummaryDTO().score(5).isScriptGraded(false))))))
 				.isPresent()
 				.contains(new GradeSummaryDTO().isScriptGraded(false).score(5));
@@ -429,9 +425,9 @@ public class GradeServiceTest {
 	public void getRelevantGradeReturnsHighestPersonGrade() {
 		assertThat(gradeService.getRelevantGrade(List.of(
 				new SubmissionDetailsDTO().submissionTime(LocalDateTime.of(2020, 1, 1, 0, 0))
-						.grades(List.of(new GradeSummaryDTO().score(10).isScriptGraded(false))),
+						.grades(Set.of(new GradeSummaryDTO().score(10).isScriptGraded(false))),
 				new SubmissionDetailsDTO().submissionTime(LocalDateTime.of(2020, 1, 2, 0, 0))
-						.grades(List.of(new GradeSummaryDTO().score(2).isScriptGraded(false),
+						.grades(Set.of(new GradeSummaryDTO().score(2).isScriptGraded(false),
 								new GradeSummaryDTO().score(5).isScriptGraded(true))))))
 				.isPresent()
 				.contains(new GradeSummaryDTO().isScriptGraded(false).score(2));
@@ -511,7 +507,7 @@ public class GradeServiceTest {
 	void removeHighestGrade() {
 		when(gradeApi.removeHighestGrade(SUBMISSION_ID)).thenReturn(Mono.empty());
 		when(submissionCache.getOrThrow(anyLong())).thenReturn(new SubmissionDetailsDTO()
-				.grades(emptyList()));
+				.grades(emptySet()));
 
 		gradeService.removeHighestGrade(SUBMISSION_ID);