diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java
index e62dd86b34e92a1292fe3ace76e4d9b2f3bcef20..d6715591975f7fdc22b2aba99bcea9e80e086b80 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/RootModelAssembler.java
@@ -25,54 +25,51 @@ package de.ozgcloud.alfa;
 
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
-import java.util.Optional;
+import java.util.List;
+import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.downloadtoken.DownloadTokenController;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
 import de.ozgcloud.alfa.common.user.UserRole;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 public class RootModelAssembler implements RepresentationModelAssembler<Root, EntityModel<Root>> {
 
 	static final String REL_DOWNLOAD_TOKEN = "downloadToken";
 	static final String REL_CURRENT_USER = "currentUser";
 	static final String REL_DOCUMENTATIONS = "documentations";
 
-	@Autowired
-	private RootViewLinkHandler viewLinkHandler;
-	@Autowired
-	private CurrentUserService currentUserService;
-	@Autowired
-	private UserManagerUrlProvider userManagerUrlProvider;
+	private final RootViewLinkHandler viewLinkHandler;
+	private final CurrentUserService currentUserService;
+	private final UserManagerUrlProvider userManagerUrlProvider;
 
 	@Value("${ozgcloud.user-assistance.documentation.url:#{null}}")
 	private String documentationUrl;
 
 	@Override
 	public EntityModel<Root> toModel(Root root) {
-		var modelBuilder = ModelBuilder.fromEntity(root)
-				.ifMatch(this::hasAnyRole).addLinks(
+		var model = EntityModel.of(root)
+				.addAllIf(hasAnyRole(), () -> List.of(
 						linkTo(RootController.class).withSelfRel(),
-						linkTo(DownloadTokenController.class).withRel(REL_DOWNLOAD_TOKEN))
-				.ifMatch(userManagerUrlProvider::isConfiguredForUserProfile)
-				.addLinkIfPresent(this::buildCurrentUserLink)
-				.addLink(buildUserAssistanceDocumentationUrl());
+						linkTo(DownloadTokenController.class).withRel(REL_DOWNLOAD_TOKEN)))
+				.addAllIf(userManagerUrlProvider.isConfiguredForUserProfile(), this::buildCurrentUserLink)
+				.add(buildUserAssistanceDocumentationUrl());
 
 		if (hasAnyRole()) {
-			viewLinkHandler.addViewLinks(modelBuilder, currentUserService.findUserId());
+			viewLinkHandler.addViewLinks(model, currentUserService.findUserId());
 		}
 
-		return modelBuilder.buildModel();
+		return model;
 	}
 
 	boolean hasAnyRole() {
@@ -83,12 +80,12 @@ public class RootModelAssembler implements RepresentationModelAssembler<Root, En
 		return currentUserService.hasRole(UserRole.VERWALTUNG_USER) || currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE);
 	}
 
-	private Optional<Link> buildCurrentUserLink() {
+	private List<Link> buildCurrentUserLink() {
 		return currentUserService.findUserId().map(userId -> Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), userId))
-				.withRel(REL_CURRENT_USER));
+				.withRel(REL_CURRENT_USER)).stream().toList();
 	}
 
-	private Optional<Link> buildUserAssistanceDocumentationUrl() {
-		return Optional.ofNullable(documentationUrl).filter(StringUtils::isNotBlank).map(href -> Link.of(href, REL_DOCUMENTATIONS));
+	private List<Link> buildUserAssistanceDocumentationUrl() {
+		return Stream.of(documentationUrl).filter(StringUtils::isNotBlank).map(href -> Link.of(href, REL_DOCUMENTATIONS)).toList();
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java
index 80f77f5181edd904055c5b2c704d5d44bed5ffa2..a8af53edb791331f6beb006f0b95bd89d8758f8d 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/RootViewLinkHandler.java
@@ -28,12 +28,11 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 import java.util.List;
 import java.util.Optional;
 
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
 import org.springframework.hateoas.server.LinkBuilder;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserId;
 import de.ozgcloud.alfa.common.user.UserRole;
@@ -41,8 +40,10 @@ import de.ozgcloud.alfa.system.SystemStatusService;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 class RootViewLinkHandler {
 
 	static final String VORGAENGE_ALL_REL_TEMPLATE = "vorgaenge_%s_all";
@@ -67,23 +68,21 @@ class RootViewLinkHandler {
 
 	static final int PAGE_SIZE = 100;
 
-	@Autowired
-	private CurrentUserService currentUserService;
-	@Autowired
-	private SystemStatusService systemStatusService;
+	private final CurrentUserService currentUserService;
+	private final SystemStatusService systemStatusService;
 
 	private final List<VorgangStatus> statusList = List.of(VorgangStatus.NEU, VorgangStatus.ANGENOMMEN, VorgangStatus.IN_BEARBEITUNG,
 			VorgangStatus.BESCHIEDEN, VorgangStatus.ABGESCHLOSSEN, VorgangStatus.VERWORFEN, VorgangStatus.ZU_LOESCHEN);
 
-	public void addViewLinks(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) {
-		modelBuilder.addLink(buildGetAllVorgaengeLink());
-		addSearchAllVorgaengeLink(modelBuilder);
+	public void addViewLinks(EntityModel<Root> model, Optional<UserId> userId) {
+		model.add(buildGetAllVorgaengeLink());
+		addSearchAllVorgaengeLink(model);
 
 		if (currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)) {
-			addViewLinksForVerwaltungPoststelle(modelBuilder, userId);
+			addViewLinksForVerwaltungPoststelle(model, userId);
 		}
 		if (currentUserService.hasRole(UserRole.VERWALTUNG_USER)) {
-			addViewLinksForVerwaltungUser(modelBuilder, userId);
+			addViewLinksForVerwaltungUser(model, userId);
 		}
 	}
 
@@ -91,9 +90,9 @@ class RootViewLinkHandler {
 		return linkTo(methodOn(VorgangController.class).getAll(0, PAGE_SIZE)).withRel(ALL_VORGAENGE_REL);
 	}
 
-	void addSearchAllVorgaengeLink(ModelBuilder<Root> modelBuilder) {
+	void addSearchAllVorgaengeLink(EntityModel<Root> model) {
 		if (systemStatusService.isSearchServerAvailable()) {
-			modelBuilder.addLink(buildGetAllVorgaengeBySearchByLink());
+			model.add(buildGetAllVorgaengeBySearchByLink());
 		}
 	}
 
@@ -101,34 +100,33 @@ class RootViewLinkHandler {
 		return linkTo(methodOn(VorgangController.class).getAllBySearchBy(0, PAGE_SIZE, null)).withRel(SEARCH_ALL_REL);
 	}
 
-	void addViewLinksForVerwaltungPoststelle(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) {
-		userId.map(this::buildMyVorgaengeLink).ifPresent(modelBuilder::addLink);
+	void addViewLinksForVerwaltungPoststelle(EntityModel<Root> model, Optional<UserId> userId) {
+		userId.map(this::buildMyVorgaengeLink).ifPresent(model::add);
 
 		if (systemStatusService.isSearchServerAvailable()) {
-			userId.map(this::buildSearchMyVorgaengeLink).ifPresent(modelBuilder::addLink);
+			userId.map(this::buildSearchMyVorgaengeLink).ifPresent(model::add);
 		}
 	}
 
-	void addViewLinksForVerwaltungUser(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) {
-		addAllVorgangStatusLinks(modelBuilder);
+	void addViewLinksForVerwaltungUser(EntityModel<Root> model, Optional<UserId> userId) {
+		addAllVorgangStatusLinks(model);
 
-		modelBuilder.addLink(buildGetAllUnassignedVorgaengeLink());
-		modelBuilder.addLinks(buildUnassignedVorgaengeStatusLinks());
+		model.add(buildGetAllUnassignedVorgaengeLink());
+		model.add(buildUnassignedVorgaengeStatusLinks());
 
-		userId.map(this::buildMyVorgaengeLink).ifPresent(modelBuilder::addLink);
-		userId.map(this::buildMyVorgaengeStatusLinks).ifPresent(modelBuilder::addLinks);
+		userId.map(this::buildMyVorgaengeLink).ifPresent(model::add);
+		userId.map(this::buildMyVorgaengeStatusLinks).ifPresent(model::add);
 
 		if (systemStatusService.isSearchServerAvailable()) {
-			userId.map(this::buildSearchMyVorgaengeLink).ifPresent(modelBuilder::addLink);
-			modelBuilder.addLink(buildSearchUnassignedVorgaengeLink());
+			userId.map(this::buildSearchMyVorgaengeLink).ifPresent(model::add);
+			model.add(buildSearchUnassignedVorgaengeLink());
 		}
 
-		modelBuilder.addLink(buildGetAllByHasNextWiedervorlageFristLink().withRel(ALL_WIEDERVORLAGEN_REL));
-		modelBuilder
-				.addLink(buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(UserId.empty(), UNASSIGNED_WIEDERVORLAGEN_REL));
-		userId.map(id -> buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(id, MY_WIEDERVORLAGEN_REL)).ifPresent(modelBuilder::addLink);
+		model.add(buildGetAllByHasNextWiedervorlageFristLink().withRel(ALL_WIEDERVORLAGEN_REL));
+		model.add(buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(UserId.empty(), UNASSIGNED_WIEDERVORLAGEN_REL));
+		userId.map(id -> buildGetAllByAssignedToAndHasNextWiedervorlageFristLink(id, MY_WIEDERVORLAGEN_REL)).ifPresent(model::add);
 
-		addGetByUngeleseneNachrichtenLinks(modelBuilder, userId);
+		addGetByUngeleseneNachrichtenLinks(model, userId);
 	}
 
 	Link buildGetAllUnassignedVorgaengeLink() {
@@ -155,12 +153,12 @@ class RootViewLinkHandler {
 		return linkTo(methodOn(VorgangController.class).getAllByAssignedToAndSearchBy(0, PAGE_SIZE, userId, null));
 	}
 
-	void addAllVorgangStatusLinks(ModelBuilder<Root> modelBuilder) {
-		addVorgangStatusLinks(modelBuilder, VORGAENGE_ALL_REL_TEMPLATE);
+	void addAllVorgangStatusLinks(EntityModel<Root> model) {
+		addVorgangStatusLinks(model, VORGAENGE_ALL_REL_TEMPLATE);
 	}
 
-	void addVorgangStatusLinks(ModelBuilder<Root> modelBuilder, String linkRelTemplate) {
-		statusList.forEach(status -> modelBuilder.addLink(buildGetAllVorgaengeByStatus(status, linkRelTemplate)));
+	void addVorgangStatusLinks(EntityModel<Root> model, String linkRelTemplate) {
+		statusList.forEach(status -> model.add(buildGetAllVorgaengeByStatus(status, linkRelTemplate)));
 	}
 
 	Link buildGetAllVorgaengeByStatus(VorgangStatus status, String linkRelTemplate) {
@@ -199,21 +197,21 @@ class RootViewLinkHandler {
 				VorgangController.PARAM_NEXT_WIEDERVORLAGE_FRIST_EXISTS)).withRel(linkRel);
 	}
 
-	void addGetByUngeleseneNachrichtenLinks(ModelBuilder<Root> modelBuilder, Optional<UserId> userId) {
-		modelBuilder.addLink(buildGelAllByUngeleseneNachrichtenLink());
-		modelBuilder.addLink(buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), UNASSIGNED_UNGELESENE_NACHRICHTEN_REL));
-		userId.map(id -> buildGetAllByAssignedToAndUngeleseneNachrichten(id, MY_UNGELESENE_NACHRICHTEN_REL)).ifPresent(modelBuilder::addLink);
+	void addGetByUngeleseneNachrichtenLinks(EntityModel<Root> model, Optional<UserId> userId) {
+		model.add(buildGelAllByUngeleseneNachrichtenLink());
+		model.add(buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(), UNASSIGNED_UNGELESENE_NACHRICHTEN_REL));
+		userId.map(id -> buildGetAllByAssignedToAndUngeleseneNachrichten(id, MY_UNGELESENE_NACHRICHTEN_REL)).ifPresent(model::add);
 	}
 
 	Link buildGelAllByUngeleseneNachrichtenLink() {
 		return linkTo(methodOn(VorgangController.class)
 				.getAllByUngeleseneNachrichten(0, PAGE_SIZE, VorgangController.PARAM_NACHRICHTEN_UNGELESENE))
-				.withRel(ALL_UNGELESENE_NACHRICHTEN_REL);
+						.withRel(ALL_UNGELESENE_NACHRICHTEN_REL);
 	}
 
 	Link buildGetAllByAssignedToAndUngeleseneNachrichten(@NonNull UserId userId, String linkRel) {
 		return linkTo(methodOn(VorgangController.class)
 				.getAllByAssignedToAndUngeleseneNachrichten(0, PAGE_SIZE, userId, VorgangController.PARAM_NACHRICHTEN_UNGELESENE))
-				.withRel(linkRel);
+						.withRel(linkRel);
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java
index cdcc60be022212764463013dd956efa906508806..88f929500547e5791e33ff45fa4d4ba383b0a044 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssembler.java
@@ -36,7 +36,6 @@ import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
 import de.ozgcloud.alfa.common.CollectionModelBuilder;
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
@@ -53,10 +52,8 @@ class CollaborationModelAssembler implements RepresentationModelAssembler<Collab
 	@Override
 	public EntityModel<Collaboration> toModel(Collaboration collaboration) {
 		var selfLink = linkTo(methodOn(CollaborationController.class).getById(collaboration.getId())).withSelfRel();
-
-		return ModelBuilder.fromEntity(collaboration)
-				.addLink(selfLink)
-				.buildModel();
+		return EntityModel.of(collaboration)
+				.add(selfLink);
 	}
 
 	public CollectionModel<EntityModel<Collaboration>> toCollectionModel(Stream<? extends Collaboration> entities, String vorgangId) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java
index b1c4dd3da3b2f4846590bd6afb9f94ae0d9e3220..2f75114f05193871bb4c78621f119d912075065f 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessor.java
@@ -25,6 +25,7 @@ package de.ozgcloud.alfa.collaboration;
 
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
+import java.util.List;
 import java.util.Objects;
 
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -35,7 +36,6 @@ import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserRole;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
@@ -60,12 +60,10 @@ class CollaborationVorgangProcessor implements RepresentationModelProcessor<Enti
 		if (Objects.isNull(vorgang) || !currentUserService.hasRole(UserRole.VERWALTUNG_USER)) {
 			return model;
 		}
-
-		return ModelBuilder.fromModel(model)
-				.ifMatch(() -> !collaborationService.hasCollaboration(vorgang.getId()))
-				.addLinks(buildSearchOrganisationsEinheitLink(), buildSearchFachstelleLink())
-				.addLink(linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgang.getId())).withRel(REL_COLLABORATIONS))
-				.buildModel();
+		model.addAllIf(!collaborationService.hasCollaboration(vorgang.getId()),
+				() -> List.of(buildSearchOrganisationsEinheitLink(), buildSearchFachstelleLink()))
+				.add(linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgang.getId())).withRel(REL_COLLABORATIONS));
+		return model;
 	}
 
 	private Link buildSearchOrganisationsEinheitLink() {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java
index 0b3a22989fd57212f3e4b93c3654d199174ed15f..9bc6f742c029bf7908c9559c22bc3ee81dfa0574 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/FachstelleModelAssembler.java
@@ -32,17 +32,14 @@ import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
-
 @Component
 class FachstelleModelAssembler
 		implements RepresentationModelAssembler<Fachstelle, EntityModel<Fachstelle>> {
 
 	@Override
 	public EntityModel<Fachstelle> toModel(@Nonnull Fachstelle entity) {
-		return ModelBuilder.fromEntity(entity)
-				.addLink(linkTo(FachstelleController.class).slash(entity.getId()).withSelfRel())
-				.buildModel();
+		return EntityModel.of(entity)
+				.add(linkTo(FachstelleController.class).slash(entity.getId()).withSelfRel());
 	}
 
 	@Override
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java
index 35bc52e64167f4ce8de05e37bf30502947c4b43d..a77ae2c76afb27e1fe2356e9e115d0b72813d4eb 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeaderModelAssembler.java
@@ -32,17 +32,14 @@ import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
-
 @Component
 class OrganisationsEinheitHeaderModelAssembler
 		implements RepresentationModelAssembler<OrganisationsEinheitHeader, EntityModel<OrganisationsEinheitHeader>> {
 
 	@Override
 	public EntityModel<OrganisationsEinheitHeader> toModel(@Nonnull OrganisationsEinheitHeader entity) {
-		return ModelBuilder.fromEntity(entity)
-				.addLink(linkTo(OrganisationsEinheitController.class).slash(entity.getId()).withSelfRel())
-				.buildModel();
+		return EntityModel.of(entity)
+				.add(linkTo(OrganisationsEinheitController.class).slash(entity.getId()).withSelfRel());
 	}
 
 	@Override
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java
index ad3ee72f30874e2fee0f3ed5475b64c68b083029..1d699dcc740a6e21cdfd9628f4fccb5a54bf0432 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitModelAssembler.java
@@ -29,15 +29,12 @@ import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
-
 @Component
 class OrganisationsEinheitModelAssembler implements RepresentationModelAssembler<OrganisationsEinheit, EntityModel<OrganisationsEinheit>> {
 
 	@Override
 	public EntityModel<OrganisationsEinheit> toModel(OrganisationsEinheit entity) {
-		return ModelBuilder.fromEntity(entity)
-				.addLink(linkTo(OrganisationsEinheitController.class).slash(entity.getId()).withSelfRel())
-				.buildModel();
+		return EntityModel.of(entity)
+				.add(linkTo(OrganisationsEinheitController.class).slash(entity.getId()).withSelfRel());
 	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ModelBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/ModelBuilder.java
deleted file mode 100644
index f4b0b7a57d263954cd004a252f044a759a1abeb9..0000000000000000000000000000000000000000
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/ModelBuilder.java
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.alfa.common;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.BooleanSupplier;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-import java.util.function.UnaryOperator;
-import java.util.stream.Collectors;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.reflect.FieldUtils;
-import org.springframework.hateoas.EntityModel;
-import org.springframework.hateoas.Link;
-import org.springframework.hateoas.server.mvc.WebMvcLinkBuilder;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-public class ModelBuilder<T> {
-
-	private static final Map<Class<?>, Map<Object, List<Field>>> ANNOTATED_FIELDS_BY_ANNOTATION = new ConcurrentHashMap<>();
-
-	private final T entity;
-	private final EntityModel<T> model;
-
-	private final List<Link> links = new LinkedList<>();
-	private final List<Function<EntityModel<T>, EntityModel<T>>> mapper = new LinkedList<>();
-
-	private ModelBuilder(T entity) {
-		this.entity = entity;
-		this.model = null;
-	}
-
-	private ModelBuilder(EntityModel<T> model) {
-		this.entity = null;
-		this.model = model;
-	}
-
-	public static <T> ModelBuilder<T> fromEntity(T entity) {
-		return new ModelBuilder<>(entity);
-	}
-
-	public static <T> ModelBuilder<T> fromModel(EntityModel<T> model) {
-		return new ModelBuilder<>(model);
-	}
-
-	public ModelBuilder<T> addLink(Link link) {
-		links.add(link);
-		return this;
-	}
-
-	public ModelBuilder<T> addLink(Optional<Link> link) {
-		link.ifPresent(links::add);
-		return this;
-	}
-
-	public ModelBuilder<T> addLinks(Link... links) {
-		this.links.addAll(Arrays.asList(links));
-		return this;
-	}
-
-	public ModelBuilder<T> addLinks(Collection<Link> links) {
-		this.links.addAll(links);
-		return this;
-	}
-
-	public ConditionalLinkAdder ifMatch(Predicate<T> predicate) {
-		return new ConditionalLinkAdder(predicate.test(Objects.isNull(entity) ? model.getContent() : entity));
-	}
-
-	public ConditionalLinkAdder ifMatch(BooleanSupplier guard) {
-		return new ConditionalLinkAdder(guard.getAsBoolean());
-	}
-
-	public ModelBuilder<T> map(UnaryOperator<EntityModel<T>> mapper) {
-		this.mapper.add(mapper);
-		return this;
-	}
-
-	public EntityModel<T> buildModel() {
-		var filteredLinks = links.stream().filter(Objects::nonNull).collect(Collectors.toSet());
-
-		EntityModel<T> buildedModel = Objects.isNull(model) ? EntityModel.of(entity) : model;
-		buildedModel = buildedModel.add(filteredLinks);
-
-		addLinkByLinkedResourceAnnotationIfMissing(buildedModel);
-
-		return applyMapper(buildedModel);
-	}
-
-	private EntityModel<T> applyMapper(EntityModel<T> resource) {
-		Iterator<Function<EntityModel<T>, EntityModel<T>>> i = mapper.iterator();
-		EntityModel<T> result = resource;
-		while (i.hasNext()) {
-			result = i.next().apply(result);
-		}
-		return result;
-	}
-
-	private void addLinkByLinkedResourceAnnotationIfMissing(EntityModel<T> resource) {
-		getFields(LinkedResource.class).stream()
-				.filter(field -> shouldAddLink(resource, field))
-				.forEach(field -> handleLinkedResourceField(resource, field));
-	}
-
-	private void handleLinkedResourceField(EntityModel<T> resource, Field field) {
-		getEntityFieldValue(field).map(Object::toString).filter(StringUtils::isNotBlank).ifPresent(val -> resource
-				.add(WebMvcLinkBuilder.linkTo(field.getAnnotation(LinkedResource.class).controllerClass()).slash(val)
-						.withRel(sanitizeName(field.getName()))));
-	}
-
-	private boolean shouldAddLink(EntityModel<T> resource, Field field) {
-		return !(field.getType().isArray() || Collection.class.isAssignableFrom(field.getType()) || resource.hasLink(sanitizeName(field.getName())));
-	}
-
-	private List<Field> getFields(Class<? extends Annotation> annotationClass) {
-		var fields = Optional.ofNullable(ANNOTATED_FIELDS_BY_ANNOTATION.get(getEntity().getClass()))
-				.map(fieldsByAnnotation -> fieldsByAnnotation.get(annotationClass))
-				.orElseGet(Collections::emptyList);
-
-		if (CollectionUtils.isEmpty(fields)) {
-			fields = FieldUtils.getFieldsListWithAnnotation(getEntity().getClass(), annotationClass);
-
-			updateFields(annotationClass, fields);
-		}
-		return fields;
-	}
-
-	private void updateFields(Class<? extends Annotation> annotationClass, List<Field> fields) {
-		var annotationMap = Optional.ofNullable(ANNOTATED_FIELDS_BY_ANNOTATION.get(getEntity().getClass())).orElseGet(HashMap::new);
-		annotationMap.put(annotationClass, fields);
-
-		ANNOTATED_FIELDS_BY_ANNOTATION.put(annotationClass, annotationMap);
-	}
-
-	private String sanitizeName(String fieldName) {
-		if (fieldName.endsWith("Id")) {
-			return fieldName.substring(0, fieldName.indexOf("Id"));
-		}
-		return fieldName;
-	}
-
-	private Optional<Object> getEntityFieldValue(Field field) {
-		try {
-			field.setAccessible(true);
-			Optional<Object> value = Optional.ofNullable(field.get(getEntity()));
-			field.setAccessible(false);
-			return value;
-		} catch (IllegalArgumentException | IllegalAccessException e) {
-			LOG.warn("Cannot access field value of LinkedResource field.", e);
-		}
-		return Optional.empty();
-	}
-
-	private T getEntity() {
-		return Optional.ofNullable(entity == null ? model.getContent() : entity)
-				.orElseThrow(() -> new IllegalStateException("Entity must not null for ModelBuilding"));
-	}
-
-	@RequiredArgsConstructor
-	public class ConditionalLinkAdder {
-
-		public final boolean conditionFulfilled;
-
-		public ModelBuilder<T> addLink(Supplier<Link> linkSupplier) {
-			if (conditionFulfilled) {
-				addLink(linkSupplier.get());
-			}
-			return ModelBuilder.this;
-		}
-
-		public ModelBuilder<T> addLinkIfPresent(Supplier<Optional<Link>> linkSupplier) {
-			if (conditionFulfilled) {
-				addLink(linkSupplier.get());
-			}
-			return ModelBuilder.this;
-		}
-
-		public ModelBuilder<T> addLink(Function<T, Link> linkBuilder) {
-			if (conditionFulfilled) {
-				addLink(linkBuilder.apply(getEntity()));
-			}
-			return ModelBuilder.this;
-		}
-
-		public ModelBuilder<T> addLink(Link link) {
-			if (conditionFulfilled) {
-				links.add(link);
-			}
-			return ModelBuilder.this;
-		}
-
-		public ModelBuilder<T> addLink(Optional<Link> link) {
-			if (conditionFulfilled) {
-				link.ifPresent(links::add);
-			}
-			return ModelBuilder.this;
-		}
-
-		public ModelBuilder<T> addLinks(Link... links) {
-			if (conditionFulfilled) {
-				ModelBuilder.this.links.addAll(Arrays.asList(links));
-			}
-			return ModelBuilder.this;
-		}
-
-		@SafeVarargs
-		public final ModelBuilder<T> addLinks(Supplier<Link>... linkSuppliers) {
-			if (conditionFulfilled) {
-				for (int i = 0; i < linkSuppliers.length; i++) {
-					ModelBuilder.this.links.add(linkSuppliers[i].get());
-				}
-			}
-			return ModelBuilder.this;
-		}
-
-		public final ModelBuilder<T> addLinks(Supplier<Collection<Link>> linksSupplier) {
-			if (conditionFulfilled) {
-				linksSupplier.get().forEach(ModelBuilder.this.links::add);
-			}
-
-			return ModelBuilder.this;
-		}
-
-	}
-}
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java
index 1f9e5345231f8f619b0951c4480d12f9cc5d2b78..bd287a72d97f68f5718fd278c5c9ef044ba4fbe5 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssembler.java
@@ -32,7 +32,6 @@ import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.file.OzgFile;
 
 @Component
@@ -43,10 +42,9 @@ public class BinaryFileModelAssembler implements RepresentationModelAssembler<Oz
 	@Override
 	public EntityModel<OzgFile> toModel(OzgFile file) {
 		var selfLink = linkTo(BinaryFileController.class).slash(file.getId());
-
-		return ModelBuilder.fromEntity(file).addLink(selfLink.withSelfRel())
-				.addLink(linkTo(BinaryFileController.class).slash(file.getId()).withRel(REL_DOWNLOAD))
-				.buildModel();
+		return EntityModel.of(file)
+				.add(selfLink.withSelfRel())
+				.add(linkTo(BinaryFileController.class).slash(file.getId()).withRel(REL_DOWNLOAD));
 	}
 
 	public CollectionModel<EntityModel<OzgFile>> toCollectionModel(Stream<OzgFile> entities) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java
index 31f4bce83e9fd2493493ccf8629ff74aecd11927..94f0209dfd9324b206466fe52e0ae806d26fbb16 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandModelAssembler.java
@@ -39,7 +39,6 @@ import org.springframework.stereotype.Component;
 import de.ozgcloud.alfa.bescheid.BescheidController;
 import de.ozgcloud.alfa.bescheid.DocumentController;
 import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.forwarding.ForwardingController;
 import de.ozgcloud.alfa.kommentar.KommentarController;
 import de.ozgcloud.alfa.postfach.PostfachMailController;
@@ -60,15 +59,12 @@ class CommandModelAssembler implements RepresentationModelAssembler<Command, Ent
 
 	@Override
 	public EntityModel<Command> toModel(Command command) {
-		return ModelBuilder.fromEntity(command)
-				.addLink(linkTo(CommandController.class).slash(command.getId()).withSelfRel())
-				.ifMatch(CommandHelper.IS_DONE.and(HAS_KNOWN_COMMAND_ORDER))
-				.addLink(() -> effectedResourceLinkByOrderType(command))
-				.ifMatch(CommandHelper.IS_PENDING)
-				.addLink(() -> linkTo(CommandController.class).slash(command.getId()).withRel(REL_UPDATE))
-				.ifMatch(IS_NOT_LOESCH_ANFORDERUNG_AND_REVOKEABLE)
-				.addLink(() -> linkTo(methodOn(CommandController.class).revoke(command.getId(), null)).withRel(REL_REVOKE))
-				.buildModel();
+		return EntityModel.of(command)
+				.add(linkTo(CommandController.class).slash(command.getId()).withSelfRel())
+				.addIf(CommandHelper.IS_DONE.and(HAS_KNOWN_COMMAND_ORDER).test(command), () -> effectedResourceLinkByOrderType(command))
+				.addIf(CommandHelper.IS_PENDING.test(command), () -> linkTo(CommandController.class).slash(command.getId()).withRel(REL_UPDATE))
+				.addIf(IS_NOT_LOESCH_ANFORDERUNG_AND_REVOKEABLE.test(command),
+						() -> linkTo(methodOn(CommandController.class).revoke(command.getId(), null)).withRel(REL_REVOKE));
 	}
 
 	Link effectedResourceLinkByOrderType(Command entity) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java
index fdb6df92dd6fa7fc692974d1e079bb8567a1bb78..b43d53909e3b9bd82ae157fa96e394ea487d2fe5 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingModelAssembler.java
@@ -35,7 +35,6 @@ import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
 import de.ozgcloud.alfa.forwarding.Forwarding.Status;
 
@@ -60,20 +59,13 @@ class ForwardingModelAssembler implements RepresentationModelAssembler<Forwardin
 	@Override
 	public EntityModel<Forwarding> toModel(Forwarding entity) {
 		var selfLink = linkTo(ForwardingController.class).slash(entity.getId());
-
-		return ModelBuilder.fromEntity(entity)
-				.addLink(linkTo(ForwardingController.class).slash(entity.getId()).withSelfRel())
-				.ifMatch(IS_SENT)
-				.addLinks(buildMarkAsSuccessLink(entity))
-				.ifMatch(IS_SENT_OR_SUCCESSFULL)
-				.addLinks(buildMarkAsFailLink(entity))
-				.ifMatch(IS_FAILED)
-				.addLink(selfLink.withRel(REL_FAILED))
-				.ifMatch(IS_SUCCESSFULL)
-				.addLink(selfLink.withRel(REL_SUCCESSFULL))
-				.ifMatch(IS_SEND_ERROR)
-				.addLink(selfLink.withRel(REL_ERROR))
-				.buildModel();
+		return EntityModel.of(entity)
+				.add(linkTo(ForwardingController.class).slash(entity.getId()).withSelfRel())
+				.addIf(IS_SENT.test(entity), () -> buildMarkAsSuccessLink(entity))
+				.addIf(IS_SENT_OR_SUCCESSFULL.test(entity), () -> buildMarkAsFailLink(entity))
+				.addIf(IS_FAILED.test(entity), () -> selfLink.withRel(REL_FAILED))
+				.addIf(IS_SUCCESSFULL.test(entity), () -> selfLink.withRel(REL_SUCCESSFULL))
+				.addIf(IS_SEND_ERROR.test(entity), () -> selfLink.withRel(REL_ERROR));
 	}
 
 	public CollectionModel<EntityModel<Forwarding>> toCollectionModel(Stream<Forwarding> entities) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java
index f7639f549bba1143a6542cc19d3bcb46d98bb0af..ebb2b04267c66642d21158dae6f542155028a5be 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintModelAssembler.java
@@ -33,8 +33,6 @@ import org.springframework.hateoas.Link;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
-
 @Component
 class HintModelAssembler implements RepresentationModelAssembler<Hint, EntityModel<Hint>> {
 
@@ -44,7 +42,7 @@ class HintModelAssembler implements RepresentationModelAssembler<Hint, EntityMod
 
 	@Override
 	public EntityModel<Hint> toModel(Hint hint) {
-		return ModelBuilder.fromEntity(hint).addLink(buildSelfLink(hint)).buildModel();
+		return EntityModel.of(hint).add(buildSelfLink(hint));
 	}
 
 	private Link buildSelfLink(Hint hint) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java
index 651e14ef63583ef1e8b89d61bfa0cb4de7f22ba9..27e8c9a4e214adc4213e329e5b98f76e51e76948 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/hint/HintRootResourceProcessor.java
@@ -25,27 +25,24 @@ package de.ozgcloud.alfa.hint;
 
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.Root;
-import de.ozgcloud.alfa.common.ModelBuilder;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 class HintRootResourceProcessor implements RepresentationModelProcessor<EntityModel<? extends Root>> {
 
 	static final String HINTS_RELATION = "hints";
 
-	@Autowired
-	private HintService service;
+	private final HintService service;
 
 	@Override
 	public EntityModel<? extends Root> process(EntityModel<? extends Root> model) {
-		return ModelBuilder.fromModel(model)
-				.ifMatch(service::hasHints)
-				.addLink(linkTo(HintController.class).withRel(HINTS_RELATION))
-				.buildModel();
+		model.addIf(service.hasHints(), () -> linkTo(HintController.class).withRel(HINTS_RELATION));
+		return model;
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java
index a88d362dfe834e164d5b7f5b33396ced8ed230da..1e6a3205439e9499e0714e6353166fd83273166b 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/historie/HistorieModelAssembler.java
@@ -35,7 +35,6 @@ import org.springframework.hateoas.Link;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.command.Command;
 import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
 import lombok.RequiredArgsConstructor;
@@ -54,11 +53,11 @@ class HistorieModelAssembler implements RepresentationModelAssembler<Command, En
 	@Override
 	public EntityModel<Command> toModel(Command entity) {
 		var cleanCommand = unsetSystemUser(entity);
-		var modelBuilder = ModelBuilder.fromEntity(cleanCommand).addLink(linkTo(HistorieController.class).slash(cleanCommand.getId()).withSelfRel());
+		var model = EntityModel.of(cleanCommand, linkTo(HistorieController.class).slash(cleanCommand.getId()).withSelfRel());
 
-		addAssignedTo(cleanCommand, modelBuilder);
+		addAssignedTo(cleanCommand, model);
 
-		return modelBuilder.buildModel();
+		return model;
 	}
 
 	Command unsetSystemUser(Command entity) {
@@ -73,13 +72,10 @@ class HistorieModelAssembler implements RepresentationModelAssembler<Command, En
 		return Objects.nonNull(entity.getCreatedBy()) && entity.getCreatedBy().toString().startsWith(SYSTEM_USER_PREFIX);
 	}
 
-	private void addAssignedTo(Command entity, ModelBuilder<Command> modelBuilder) {
+	private void addAssignedTo(Command entity, EntityModel<Command> model) {
 		Optional.ofNullable(entity.getBody()).map(body -> body.get(ASSIGNED_TO_BODY_FIELD))
-				.ifPresent(assignedTo -> {
-					if (userManagerUrlProvider.isConfiguredForUserProfile()) {
-						modelBuilder.addLink(Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), assignedTo), REL_ASSIGNED_TO));
-					}
-				});
+				.ifPresent(assignedTo -> model.addIf(userManagerUrlProvider.isConfiguredForUserProfile(),
+						() -> Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), assignedTo), REL_ASSIGNED_TO)));
 	}
 
 	public CollectionModel<EntityModel<Command>> toCollectionModel(Stream<Command> entities) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java
index ed4c3a53428540126bb1e7440fbba411d9b58753..3ed9abdfc3c5b232fe96bab5aa1f106efb3c92b6 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java
@@ -28,20 +28,20 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.CollectionModel;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.CollectionModelBuilder;
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
 import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar, EntityModel<Kommentar>> {
 
 	static final String REL_CREATE = "create-kommentar";
@@ -51,8 +51,7 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
 
 	private static final Predicate<Kommentar> HAS_ATTACHMENTS = kommentar -> !kommentar.getAttachments().isEmpty();
 
-	@Autowired
-	private VorgangController vorgangController;
+	private final VorgangController vorgangController;
 
 	@Override
 	public EntityModel<Kommentar> toModel(Kommentar kommentar) {
@@ -65,12 +64,9 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
 		var commandLink = linkTo(methodOn(KommentarCommandController.class).editKommentar(null, kommentar.getId(), kommentar.getVersion()));
 		var attachmentsLink = linkTo(methodOn(KommentarController.class).getAttachments(kommentar.getId()));
 
-		return ModelBuilder.fromEntity(kommentar).addLink(selfLink.withSelfRel())
-				.ifMatch(() -> vorgangController.isEditable(vorgang))
-				.addLink(commandLink.withRel(REL_EDIT))
-				.ifMatch(HAS_ATTACHMENTS)
-				.addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
-				.buildModel();
+		return EntityModel.of(kommentar, selfLink.withSelfRel())
+				.addIf(vorgangController.isEditable(vorgang), () -> commandLink.withRel(REL_EDIT))
+				.addIf(HAS_ATTACHMENTS.test(kommentar), () -> attachmentsLink.withRel(REL_ATTACHMENTS));
 	}
 
 	public CollectionModel<EntityModel<Kommentar>> toCollectionModel(Stream<Kommentar> entities, String vorgangId) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java
index a1843587039f98039222b661b48b5b2918dd8c5b..d915e9523520305363c1c246fceb0ad4cc4f0b59 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessor.java
@@ -26,27 +26,25 @@ package de.ozgcloud.alfa.loeschanforderung;
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
 import java.util.Objects;
-import java.util.Optional;
 import java.util.function.Predicate;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
 import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem;
 import de.ozgcloud.alfa.common.command.Command;
 import de.ozgcloud.alfa.common.command.CommandHelper;
 import de.ozgcloud.alfa.common.command.CommandOrder;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 class LoeschAnforderungCommandProcessor implements RepresentationModelProcessor<EntityModel<Command>> {
 
-	@Autowired
-	private LoeschAnforderungService service;
+	private final LoeschAnforderungService service;
 
 	static final LinkRelation REL_REVOKE = LinkRelation.of("revoke");
 
@@ -62,17 +60,17 @@ class LoeschAnforderungCommandProcessor implements RepresentationModelProcessor<
 		if (Objects.isNull(command)) {
 			return model;
 		}
-		return ModelBuilder.fromModel(model)
-				.ifMatch(IS_LOESCHEN_ANFORDERUNG_ZURUECKNEHMEN_AND_REVOKEABLE)
-				.addLink(() -> linkTo(methodOn(LoeschAnforderungCommandController.class).revoke(command.getRelationId(), command.getId(), null))
-						.withRel(REL_REVOKE))
-				.ifMatch(IS_VORGANG_ZUM_LOESCHEN_MARKIEREN_AND_REVOKEABLE)
-				.addLinkIfPresent(() -> buildLink(command))
-				.buildModel();
+		return model
+				.addIf(IS_LOESCHEN_ANFORDERUNG_ZURUECKNEHMEN_AND_REVOKEABLE.test(command),
+						() -> linkTo(methodOn(LoeschAnforderungCommandController.class).revoke(command.getRelationId(), command.getId(), null))
+								.withRel(REL_REVOKE))
+				.addAllIf(IS_VORGANG_ZUM_LOESCHEN_MARKIEREN_AND_REVOKEABLE.test(command),
+						() -> buildLink(command));
 	}
 
-	Optional<Link> buildLink(Command command) {
-		return service.findLoeschAnforderung(command.getVorgangId()).map(loeschAnforderung -> buildLink(loeschAnforderung, command.getId()));
+	Iterable<Link> buildLink(Command command) {
+		return service.findLoeschAnforderung(command.getVorgangId()).map(loeschAnforderung -> buildLink(loeschAnforderung, command.getId())).stream()
+				.toList();
 	}
 
 	Link buildLink(VorgangAttachedItem loeschAnforderung, String commandId) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java
index d2b91d808a956a20483ce342da8763de668f9a97..735ad323fc220c34836bafbc007cc0ec6f94752f 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungModelAssembler.java
@@ -25,32 +25,30 @@ package de.ozgcloud.alfa.loeschanforderung;
 
 import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 class LoeschAnforderungModelAssembler implements RepresentationModelAssembler<LoeschAnforderung, EntityModel<LoeschAnforderung>> {
 
 	static final LinkRelation REL_EXECUTE_LOESCHEN = LinkRelation.of("execute_loeschen");
 	static final LinkRelation REL_LOESCH_ANFORDERUNG_ZURUECKNEHMEN = LinkRelation.of("zuruecknehmen");
 
-	@Autowired
-	private LoeschAnforderungService loeschAnforderungService;
+	private final LoeschAnforderungService loeschAnforderungService;
 
 	@Override
 	public EntityModel<LoeschAnforderung> toModel(LoeschAnforderung loeschAnforderung) {
-		return ModelBuilder.fromEntity(loeschAnforderung)
-				.addLink(linkTo(methodOn(LoeschAnforderungController.class).getLoeschanforderung(loeschAnforderung.getId())).withSelfRel())
-				.ifMatch(loeschAnforderungService::isAllowedToVorgangLoeschen)
-				.addLink(linkTo(methodOn(LoeschAnforderungCommandController.class).createCommand(loeschAnforderung.getId(), null)).withRel(
-						REL_EXECUTE_LOESCHEN))
-				.addLink(linkTo(methodOn(LoeschAnforderungCommandController.class).createCommand(loeschAnforderung.getId(), null)).withRel(
-						REL_LOESCH_ANFORDERUNG_ZURUECKNEHMEN))
-				.buildModel();
+		return EntityModel.of(loeschAnforderung)
+				.add(linkTo(methodOn(LoeschAnforderungController.class).getLoeschanforderung(loeschAnforderung.getId())).withSelfRel())
+				.addIf(loeschAnforderungService.isAllowedToVorgangLoeschen(loeschAnforderung),
+						() -> linkTo(methodOn(LoeschAnforderungCommandController.class).createCommand(loeschAnforderung.getId(), null)).withRel(
+								REL_EXECUTE_LOESCHEN))
+				.add(linkTo(methodOn(LoeschAnforderungCommandController.class).createCommand(loeschAnforderung.getId(), null)).withRel(
+						REL_LOESCH_ANFORDERUNG_ZURUECKNEHMEN));
 	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java
index 5281c140049b6c730996d7243ae76b3e0a3ec408..c37a359c0dbc26358097580328c4b295b1eb64b4 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungVorgangProcessor.java
@@ -27,7 +27,6 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
 import java.util.List;
 import java.util.Objects;
-import java.util.Optional;
 
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
@@ -35,7 +34,6 @@ import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.attacheditem.VorgangAttachedItem;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserRole;
@@ -68,12 +66,9 @@ class LoeschAnforderungVorgangProcessor implements RepresentationModelProcessor<
 		}
 
 		var vorgangAttachedItem = service.findLoeschAnforderung(vorgang.getId());
-
-		return ModelBuilder.fromModel(model)
-				.ifMatch(this::isLoeschenAnfordernAllowed)
-				.addLink(buildLoschenAnfordernLink(vorgang))
-				.addLink(buildLoschAnforderungLink(vorgangAttachedItem))
-				.buildModel();
+		return model
+				.addIf(isLoeschenAnfordernAllowed(vorgang), () -> buildLoschenAnfordernLink(vorgang))
+				.addIf(vorgangAttachedItem.isPresent(), () -> buildLoschAnforderungLink(vorgangAttachedItem.get()));
 	}
 
 	boolean isLoeschenAnfordernAllowed(Vorgang vorgang) {
@@ -93,8 +88,7 @@ class LoeschAnforderungVorgangProcessor implements RepresentationModelProcessor<
 				.withRel(REL_LOESCHEN_ANFORDERN);
 	}
 
-	private Optional<Link> buildLoschAnforderungLink(Optional<VorgangAttachedItem> vorgangAttachedItem) {
-		return vorgangAttachedItem.map(item -> linkTo(methodOn(LoeschAnforderungController.class).getLoeschanforderung(item.getId()))
-				.withRel(REL_LOESCH_ANFORDERUNG));
+	private Link buildLoschAnforderungLink(VorgangAttachedItem vorgangAttachedItem) {
+		return linkTo(methodOn(LoeschAnforderungController.class).getLoeschanforderung(vorgangAttachedItem.getId())).withRel(REL_LOESCH_ANFORDERUNG);
 	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java
index 8de875f0fae7795526b3f0b7ec0dd996a2a38d79..d857ac77a073b629badf46eb4462265f2d8aba2e 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailModelAssembler.java
@@ -39,7 +39,6 @@ import org.springframework.hateoas.mediatype.hal.HalModelBuilder;
 import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
 import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
 import de.ozgcloud.alfa.postfach.PostfachMail.Direction;
@@ -124,21 +123,20 @@ class PostfachMailModelAssembler implements RepresentationModelAssembler<Postfac
 	public EntityModel<PostfachMail> toModel(PostfachMail postfachMail) {
 		var selfLink = linkTo(PostfachMailController.class).slash(postfachMail.getId());
 
-		return ModelBuilder.fromEntity(postfachMail).addLink(selfLink.withSelfRel())
-				.ifMatch(IS_UNSEND).addLink(linkTo(PostfachMailCommandController.class, postfachMail.getId()).withRel(REL_SEND))
-				.ifMatch(SENT_FAILED)
-				.addLink(linkTo(methodOn(PostfachMailCommandController.class).createCommand(postfachMail.getId(), null))
-						.withRel(REL_RESEND_POSTFACH_MAIL))
-				.ifMatch(IS_UNSEND)
-				.addLink(linkTo(methodOn(PostfachMailCommandController.class).createCommand(postfachMail.getId(), null))
-						.withRel(REL_EDIT))
-				.ifMatch(HAS_ATTACHMENTS)
-				.addLink(linkTo(methodOn(PostfachMailController.class).findAttachments(PostfachNachrichtId.from(postfachMail.getId())))
-						.withRel(REL_ATTACHMENTS))
-				.ifMatch(() -> userManagerUrlProvider.isConfiguredForUserProfile() && SENT_BY_CLIENT_USER.test(postfachMail))
-				.addLink(() -> Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), postfachMail.getCreatedBy()),
-						REL_CREATED_BY))
-				.buildModel();
+		return EntityModel.of(postfachMail)
+				.add(selfLink.withSelfRel())
+				.addIf(IS_UNSEND.test(postfachMail),
+						() -> linkTo(PostfachMailCommandController.class, postfachMail.getId()).withRel(REL_SEND))
+				.addIf(SENT_FAILED.test(postfachMail),
+						() -> linkTo(methodOn(PostfachMailCommandController.class).createCommand(postfachMail.getId(), null))
+								.withRel(REL_RESEND_POSTFACH_MAIL))
+				.addIf(IS_UNSEND.test(postfachMail),
+						() -> linkTo(methodOn(PostfachMailCommandController.class).createCommand(postfachMail.getId(), null)).withRel(REL_EDIT))
+				.addIf(HAS_ATTACHMENTS.test(postfachMail),
+						() -> linkTo(methodOn(PostfachMailController.class).findAttachments(PostfachNachrichtId.from(postfachMail.getId())))
+								.withRel(REL_ATTACHMENTS))
+				.addIf(userManagerUrlProvider.isConfiguredForUserProfile() && SENT_BY_CLIENT_USER.test(postfachMail),
+						() -> Link.of(String.format(userManagerUrlProvider.getUserProfileTemplate(), postfachMail.getCreatedBy()), REL_CREATED_BY));
 	}
 
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java
index 47c76b1574946937db404c0342d93411f029cc6d..800829cb556d58a3bc55d030f3b9369d95e7c3ac 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangModelAssembler.java
@@ -37,7 +37,6 @@ import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 import org.springframework.web.util.UriComponentsBuilder;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserId;
@@ -137,13 +136,11 @@ class VorgangModelAssembler implements RepresentationModelAssembler<Vorgang, Ent
 				vorgang.getVersion(), null)).withRel(REL_VORGANG_ASSIGN);
 		var wiedervorlagenLink = linkTo(methodOn(WiedervorlageController.class).findByVorgang(vorgang.getId())).withRel(REL_WIEDERVORLAGEN);
 
-		return ModelBuilder.fromEntity(vorgang)
-				.addLink(selfLinkBuilder.withSelfRel())
-				.addLink(selfLinkBuilder.withRel(REL_VORGANG_MIT_EINGANG))
-				.ifMatch(() -> isAssigneable(vorgang))
-				.addLink(assignLink)
-				.ifMatch(() -> userService.hasRole(UserRole.VERWALTUNG_USER)).addLink(wiedervorlagenLink)
-				.buildModel();
+		return EntityModel.of(vorgang)
+				.add(selfLinkBuilder.withSelfRel())
+				.add(selfLinkBuilder.withRel(REL_VORGANG_MIT_EINGANG))
+				.addIf(isAssigneable(vorgang), () -> (assignLink))
+				.addIf(userService.hasRole(UserRole.VERWALTUNG_USER), () -> wiedervorlagenLink);
 	}
 
 	boolean isAssigneable(Vorgang vorgang) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java
index a5014ff3e7ac1482d61d7c3b6e3b509f744b7fae..e6b7fc75996dc58968bd33cd7dd2431cbcfca61d 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangWithEingangProcessor.java
@@ -37,7 +37,6 @@ import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.attachment.AttachmentByVorgangController;
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
 import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
 import de.ozgcloud.alfa.historie.HistorieController;
@@ -83,29 +82,24 @@ class VorgangWithEingangProcessor implements RepresentationModelProcessor<Entity
 			return model;
 		}
 
-		return ModelBuilder.fromModel(model)
-				.addLink(linkTo(KommentarByVorgangController.class).slash(vorgang.getId()).slash("kommentars").withRel(REL_KOMMENTARE))
-				.ifMatch(HAS_ATTACHMENTS)
-				.addLinks(linkTo(methodOn(AttachmentByVorgangController.class).getAllByVorgang(vorgang.getId()))
-						.withRel(REL_ATTACHMENTS),
-						linkTo(methodOn(AttachmentByVorgangController.class).download(vorgang.getId()))
-								.withRel(REL_DOWNLOAD_ATTACHMENTS))
-				.ifMatch(HAS_REPRESENTATIONS)
-				.addLink(linkTo(methodOn(RepresentationByVorgangController.class).getAll(vorgang.getId()))
-						.withRel(REL_REPRESENTATIONS))
-				.ifMatch(this::isPostfachConfigured)
-				.addLink(linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withRel(REL_POSTFACH_MAILS))
-				.addLink(linkTo(methodOn(HistorieController.class).getAll(vorgang.getId())).withRel(REL_HISTORIE))
-				.ifMatch(() -> userManagerUrlProvider.isConfiguredForSearchUserProfile() && hasOrganisationsEinheitId(vorgang))
-				.addLink(this::buildSearchUserProfilesLink)
-				.ifMatch(this::isProcessable)
-				.addLink(
+		return model
+				.add(linkTo(KommentarByVorgangController.class).slash(vorgang.getId()).slash("kommentars").withRel(REL_KOMMENTARE))
+				.addAllIf(HAS_ATTACHMENTS.test(vorgang), () -> List.of(
+						linkTo(methodOn(AttachmentByVorgangController.class).getAllByVorgang(vorgang.getId())).withRel(REL_ATTACHMENTS),
+						linkTo(methodOn(AttachmentByVorgangController.class).download(vorgang.getId())).withRel(REL_DOWNLOAD_ATTACHMENTS)))
+				.addIf(HAS_REPRESENTATIONS.test(vorgang),
+						() -> linkTo(methodOn(RepresentationByVorgangController.class).getAll(vorgang.getId())).withRel(REL_REPRESENTATIONS))
+				.addIf(isPostfachConfigured(),
+						() -> linkTo(methodOn(PostfachMailController.class).getAll(vorgang.getId())).withRel(REL_POSTFACH_MAILS))
+				.add(linkTo(methodOn(HistorieController.class).getAll(vorgang.getId())).withRel(REL_HISTORIE))
+				.addIf(userManagerUrlProvider.isConfiguredForSearchUserProfile() && hasOrganisationsEinheitId(vorgang),
+						() -> buildSearchUserProfilesLink(vorgang))
+				.addIf(isProcessable(vorgang),
 						() -> linkTo(methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(),
-								null)).withRel(REL_PROCESS_VORGANG))
-				.buildModel();
+								null)).withRel(REL_PROCESS_VORGANG));
 	}
 
-	private boolean isPostfachConfigured(VorgangWithEingang vorgang) {
+	private boolean isPostfachConfigured() {
 		return postfachMailController.isPostfachConfigured();
 	}
 
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java
index 2c2453560d8651d92c72673e29d17f6d75ce75c3..34de66b87575d17ed2aa13ce1aa43378f4ef9576 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/command/VorgangWithEingangCommandProcessor.java
@@ -27,13 +27,11 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
 
 import java.util.Objects;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.LinkRelation;
 import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
@@ -41,19 +39,18 @@ import de.ozgcloud.alfa.common.user.UserRole;
 import de.ozgcloud.alfa.forwarding.ForwardingController;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
+import lombok.RequiredArgsConstructor;
 
 @Component
+@RequiredArgsConstructor
 public class VorgangWithEingangCommandProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> {
 
 	static final LinkRelation REL_VORGANG_FORWARD = LinkRelation.of("forward");
 	static final LinkRelation REL_PENDING_COMMANDS = LinkRelation.of("pending-commands");
 
-	@Autowired
-	private CurrentUserService userService;
-	@Autowired
-	private ForwardingController forwardingController;
-	@Autowired
-	private CommandController commandController;
+	private final CurrentUserService userService;
+	private final ForwardingController forwardingController;
+	private final CommandController commandController;
 
 	@Override
 	public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) {
@@ -61,14 +58,12 @@ public class VorgangWithEingangCommandProcessor implements RepresentationModelPr
 		if (Objects.isNull(vorgang)) {
 			return model;
 		}
-		return ModelBuilder.fromModel(model)
-				.ifMatch(this::isForwardingAllowed)
-				.addLink(linkTo(
+		return model
+				.addIf(isForwardingAllowed(vorgang), () -> linkTo(
 						methodOn(CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(), vorgang.getVersion(),
 								null)).withRel(REL_VORGANG_FORWARD))
-				.ifMatch(this::existsPendingCommands)
-				.addLink(linkTo(methodOn(CommandController.class).getPendingCommands(true, vorgang.getId())).withRel(REL_PENDING_COMMANDS))
-				.buildModel();
+				.addIf(existsPendingCommands(vorgang),
+						() -> linkTo(methodOn(CommandController.class).getPendingCommands(true, vorgang.getId())).withRel(REL_PENDING_COMMANDS));
 	}
 
 	boolean isForwardingAllowed(VorgangWithEingang vorgang) {
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java
index c626a7ad29a639313e4d30a6c07bb59ea223112f..fb0c2b92289b5de2105824e5ecd89faa0c84cea3 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/RootViewLinkHandlerTest.java
@@ -39,12 +39,12 @@ import org.junit.jupiter.params.provider.EnumSource.Mode;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
+import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.Link;
 import org.springframework.hateoas.LinkRelation;
 
 import com.thedeanda.lorem.LoremIpsum;
 
-import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserId;
 import de.ozgcloud.alfa.common.user.UserProfileTestFactory;
@@ -66,36 +66,37 @@ class RootViewLinkHandlerTest {
 	@Nested
 	class TestAddViewLinks {
 
-		@Mock
-		private Root rootResource;
+		private Root rootResource = RootTestFactory.create();
 
 		private Optional<UserId> emptyUserId = Optional.empty();
 
 		@Test
 		void shouldAddVorgaengeAllLink() {
-			var modelBuilder = ModelBuilder.fromEntity(rootResource);
-			viewLinkHandler.addViewLinks(modelBuilder, emptyUserId);
+			var model = EntityModel.of(rootResource);
 
-			assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.ALL_VORGAENGE_REL))
+			viewLinkHandler.addViewLinks(model, emptyUserId);
+
+			assertThat(model.getLink(RootViewLinkHandler.ALL_VORGAENGE_REL))
 					.get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100");
 		}
 
 		@Test
 		void shouldCallAddSearchAllVorgaengeLink() {
-			var modelBuilder = ModelBuilder.fromEntity(rootResource);
-			viewLinkHandler.addViewLinks(modelBuilder, emptyUserId);
+			var model = EntityModel.of(rootResource);
+
+			viewLinkHandler.addViewLinks(model, emptyUserId);
 
-			verify(viewLinkHandler).addSearchAllVorgaengeLink(modelBuilder);
+			verify(viewLinkHandler).addSearchAllVorgaengeLink(model);
 		}
 
 		@Test
 		void shouldAddLinksForVerwaltungPoststelle() {
 			when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(true);
 
-			var modelBuilder = ModelBuilder.fromEntity(rootResource);
-			viewLinkHandler.addViewLinks(modelBuilder, emptyUserId);
+			var model = EntityModel.of(rootResource);
+			viewLinkHandler.addViewLinks(model, emptyUserId);
 
-			verify(viewLinkHandler).addViewLinksForVerwaltungPoststelle(modelBuilder, emptyUserId);
+			verify(viewLinkHandler).addViewLinksForVerwaltungPoststelle(model, emptyUserId);
 		}
 
 		@Test
@@ -103,21 +104,21 @@ class RootViewLinkHandlerTest {
 			when(currentUserService.hasRole(UserRole.VERWALTUNG_POSTSTELLE)).thenReturn(false);
 			when(currentUserService.hasRole(UserRole.VERWALTUNG_USER)).thenReturn(true);
 
-			var modelBuilder = ModelBuilder.fromEntity(rootResource);
-			viewLinkHandler.addViewLinks(modelBuilder, emptyUserId);
+			var model = EntityModel.of(rootResource);
+			viewLinkHandler.addViewLinks(model, emptyUserId);
 
-			verify(viewLinkHandler).addViewLinksForVerwaltungUser(modelBuilder, emptyUserId);
+			verify(viewLinkHandler).addViewLinksForVerwaltungUser(model, emptyUserId);
 		}
 
 		@DisplayName("for " + UserRole.VERWALTUNG_POSTSTELLE)
 		@Nested
 		class TestVerwaltungPoststelle {
 
-			private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource);
+			private final EntityModel<Root> model = EntityModel.of(rootResource);
 
 			@Test
 			void shouldCallBuildMyVorgaengeLink() {
-				viewLinkHandler.addViewLinksForVerwaltungPoststelle(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungPoststelle(model, Optional.of(UserProfileTestFactory.ID));
 
 				verify(viewLinkHandler).buildMyVorgaengeLink(UserProfileTestFactory.ID);
 			}
@@ -134,7 +135,7 @@ class RootViewLinkHandlerTest {
 					void shouldCallBuildSearchMyVorgaengeLink() {
 						when(systemStatusService.isSearchServerAvailable()).thenReturn(true);
 
-						viewLinkHandler.addViewLinksForVerwaltungPoststelle(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						viewLinkHandler.addViewLinksForVerwaltungPoststelle(model, Optional.of(UserProfileTestFactory.ID));
 
 						verify(viewLinkHandler).buildSearchMyVorgaengeLink(UserProfileTestFactory.ID);
 					}
@@ -148,7 +149,7 @@ class RootViewLinkHandlerTest {
 					void shouldNotCallBuildSearchMyVorgaengeLink() {
 						when(systemStatusService.isSearchServerAvailable()).thenReturn(false);
 
-						viewLinkHandler.addViewLinksForVerwaltungPoststelle(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						viewLinkHandler.addViewLinksForVerwaltungPoststelle(model, Optional.of(UserProfileTestFactory.ID));
 
 						verify(viewLinkHandler, never()).buildSearchMyVorgaengeLink(any());
 					}
@@ -160,18 +161,18 @@ class RootViewLinkHandlerTest {
 		@Nested
 		class TestVerwaltungUser {
 
-			private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource);
+			private final EntityModel<Root> model = EntityModel.of(rootResource);
 
 			@Test
 			void shouldCallAddUnassignedVorgaengeLink() {
-				viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 				verify(viewLinkHandler).buildGetAllUnassignedVorgaengeLink();
 			}
 
 			@Test
 			void shouldCallAddMyVorgaengeLink() {
-				viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 				verify(viewLinkHandler).buildMyVorgaengeLink(UserProfileTestFactory.ID);
 			}
@@ -188,7 +189,7 @@ class RootViewLinkHandlerTest {
 					void shouldCallBuildSearchMyVorgaengeLink() {
 						when(systemStatusService.isSearchServerAvailable()).thenReturn(true);
 
-						viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 						verify(viewLinkHandler).buildSearchMyVorgaengeLink(UserProfileTestFactory.ID);
 					}
@@ -202,7 +203,7 @@ class RootViewLinkHandlerTest {
 					void shouldNotCallBuildSearchMyVorgaengeLink() {
 						when(systemStatusService.isSearchServerAvailable()).thenReturn(false);
 
-						viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 						verify(viewLinkHandler, never()).buildSearchMyVorgaengeLink(any());
 					}
@@ -211,21 +212,21 @@ class RootViewLinkHandlerTest {
 
 			@Test
 			void shouldCallAddVorgangStatusLinks() {
-				viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
-				verify(viewLinkHandler).addAllVorgangStatusLinks(modelBuilder);
+				verify(viewLinkHandler).addAllVorgangStatusLinks(model);
 			}
 
 			@Test
 			void shouldCallAddMyVorgaengeStatusLinks() {
-				viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 				verify(viewLinkHandler).buildMyVorgaengeStatusLinks(UserProfileTestFactory.ID);
 			}
 
 			@Test
 			void shouldCallAddUnassignedVorgaengeStatusLinks() {
-				viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 				verify(viewLinkHandler).buildUnassignedVorgaengeStatusLinks();
 			}
@@ -242,7 +243,7 @@ class RootViewLinkHandlerTest {
 					void shouldCallBuildSearchUnassignedVorgaengeLink() {
 						when(systemStatusService.isSearchServerAvailable()).thenReturn(true);
 
-						viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 						verify(viewLinkHandler).buildSearchUnassignedVorgaengeLink();
 					}
@@ -256,7 +257,7 @@ class RootViewLinkHandlerTest {
 					void shouldNotCallBuildSearchUnassignedVorgaengeLink() {
 						when(systemStatusService.isSearchServerAvailable()).thenReturn(false);
 
-						viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
 						verify(viewLinkHandler, never()).buildSearchUnassignedVorgaengeLink();
 					}
@@ -269,10 +270,10 @@ class RootViewLinkHandlerTest {
 
 				@Test
 				void shouldAddAllLink() {
-					var modelBuilder = ModelBuilder.fromEntity(rootResource);
-					viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+					var model = EntityModel.of(rootResource);
+					viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
-					assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.ALL_WIEDERVORLAGEN_REL))
+					assertThat(model.getLink(RootViewLinkHandler.ALL_WIEDERVORLAGEN_REL))
 							.get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100&nextFrist=exists");
 				}
 
@@ -282,38 +283,38 @@ class RootViewLinkHandlerTest {
 
 					@Test
 					void shouldAddAssignedLinkIfExists() {
-						var modelBuilder = ModelBuilder.fromEntity(rootResource);
-						viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+						var model = EntityModel.of(rootResource);
+						viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
-						assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.MY_WIEDERVORLAGEN_REL))
+						assertThat(model.getLink(RootViewLinkHandler.MY_WIEDERVORLAGEN_REL))
 								.get().extracting(Link::getHref)
 								.isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=" + UserProfileTestFactory.ID + "&nextFrist=exists");
 					}
 
 					@Test
 					void shoulNotAddAssignedLinkIfNotExists() {
-						var modelBuilder = ModelBuilder.fromEntity(rootResource);
-						viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.empty());
+						var model = EntityModel.of(rootResource);
+						viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.empty());
 
-						assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.MY_WIEDERVORLAGEN_REL)).isNotPresent();
+						assertThat(model.getLink(RootViewLinkHandler.MY_WIEDERVORLAGEN_REL)).isNotPresent();
 					}
 				}
 
 				@Test
 				void shouldAddUnassignedLink() {
-					var modelBuilder = ModelBuilder.fromEntity(rootResource);
-					viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+					var model = EntityModel.of(rootResource);
+					viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
-					assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.UNASSIGNED_WIEDERVORLAGEN_REL))
+					assertThat(model.getLink(RootViewLinkHandler.UNASSIGNED_WIEDERVORLAGEN_REL))
 							.get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100&assignedTo=&nextFrist=exists");
 				}
 			}
 
 			@Test
 			void shouldAddLinksForUngeleseneNachrichten() {
-				viewLinkHandler.addViewLinksForVerwaltungUser(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addViewLinksForVerwaltungUser(model, Optional.of(UserProfileTestFactory.ID));
 
-				verify(viewLinkHandler).addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				verify(viewLinkHandler).addGetByUngeleseneNachrichtenLinks(model, Optional.of(UserProfileTestFactory.ID));
 			}
 		}
 
@@ -325,10 +326,10 @@ class RootViewLinkHandlerTest {
 			void shouldBeAddedIfSearchServerIsAvailable() {
 				when(systemStatusService.isSearchServerAvailable()).thenReturn(true);
 
-				var modelBuilder = ModelBuilder.fromEntity(rootResource);
-				viewLinkHandler.addSearchAllVorgaengeLink(modelBuilder);
+				var model = EntityModel.of(rootResource);
+				viewLinkHandler.addSearchAllVorgaengeLink(model);
 
-				assertThat(modelBuilder.buildModel().getLink(RootViewLinkHandler.SEARCH_ALL_REL))
+				assertThat(model.getLink(RootViewLinkHandler.SEARCH_ALL_REL))
 						.get().extracting(Link::getHref).isEqualTo("/api/vorgangs?page=0&limit=100&searchBy={searchBy}");
 			}
 
@@ -336,10 +337,10 @@ class RootViewLinkHandlerTest {
 			void shouldNotBeAddedIfSearchServerIsUnavailable() {
 				when(systemStatusService.isSearchServerAvailable()).thenReturn(false);
 
-				var modelBuilder = spy(ModelBuilder.fromEntity(rootResource));
-				viewLinkHandler.addSearchAllVorgaengeLink(modelBuilder);
+				var model = spy(EntityModel.of(rootResource));
+				viewLinkHandler.addSearchAllVorgaengeLink(model);
 
-				verify(modelBuilder, never()).addLink(any(Link.class));
+				verify(model, never()).add(any(Link.class));
 			}
 		}
 
@@ -404,13 +405,13 @@ class RootViewLinkHandlerTest {
 		@Nested
 		class TestAddAllVorgangStatusLinks {
 
-			private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource);
+			private final EntityModel<Root> model = EntityModel.of(rootResource);
 
 			@Test
 			void shouldCallAddVorgangStatusLinks() {
-				viewLinkHandler.addAllVorgangStatusLinks(modelBuilder);
+				viewLinkHandler.addAllVorgangStatusLinks(model);
 
-				verify(viewLinkHandler).addVorgangStatusLinks(modelBuilder, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE);
+				verify(viewLinkHandler).addVorgangStatusLinks(model, RootViewLinkHandler.VORGAENGE_ALL_REL_TEMPLATE);
 			}
 		}
 
@@ -619,9 +620,8 @@ class RootViewLinkHandlerTest {
 	@Nested
 	class TestAddGetByUngeleseneNachrichtenLinks {
 
-		@Mock
-		private Root rootResource;
-		private final ModelBuilder<Root> modelBuilder = ModelBuilder.fromEntity(rootResource);
+		private Root rootResource = RootTestFactory.create();
+		private final EntityModel<Root> model = EntityModel.of(rootResource);
 		private final Link linkAllUngeleseneNachrichten = Link.of(LoremIpsum.getInstance().getUrl());
 		private final Link linkMyUngeleseneNachrichten = Link.of(LoremIpsum.getInstance().getUrl());
 		private final Link linkUnassignedUngeleseneNachrichten = Link.of(LoremIpsum.getInstance().getUrl());
@@ -635,23 +635,23 @@ class RootViewLinkHandlerTest {
 
 		@Test
 		void shouldBuildLinkForUngeleseneNachrichten() {
-			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.of(UserProfileTestFactory.ID));
 
 			verify(viewLinkHandler).buildGelAllByUngeleseneNachrichtenLink();
 		}
 
 		@Test
 		void shouldAddLinkForUngeleseneNachrichten() {
-			var modelBuilder = ModelBuilder.fromEntity(rootResource);
+			var model = EntityModel.of(rootResource);
 
-			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.of(UserProfileTestFactory.ID));
 
-			assertThat(modelBuilder.buildModel().getLinks()).contains(linkAllUngeleseneNachrichten);
+			assertThat(model.getLinks()).contains(linkAllUngeleseneNachrichten);
 		}
 
 		@Test
 		void shouldBuildLinkForUnassignedUngeleseneNachrichten() {
-			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.empty());
+			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.empty());
 
 			verify(viewLinkHandler).buildGetAllByAssignedToAndUngeleseneNachrichten(UserId.empty(),
 					RootViewLinkHandler.UNASSIGNED_UNGELESENE_NACHRICHTEN_REL);
@@ -659,11 +659,11 @@ class RootViewLinkHandlerTest {
 
 		@Test
 		void shouldAddLinkForUnassignedUngeleseneNachrichten() {
-			var modelBuilder = ModelBuilder.fromEntity(rootResource);
+			var model = EntityModel.of(rootResource);
 
-			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.empty());
+			viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.empty());
 
-			assertThat(modelBuilder.buildModel().getLinks()).contains(linkUnassignedUngeleseneNachrichten);
+			assertThat(model.getLinks()).contains(linkUnassignedUngeleseneNachrichten);
 		}
 
 		@Nested
@@ -677,7 +677,7 @@ class RootViewLinkHandlerTest {
 
 			@Test
 			void shouldBuildLinkForMyUngeleseneNachrichten() {
-				viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.of(UserProfileTestFactory.ID));
 
 				verify(viewLinkHandler).buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID,
 						RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL);
@@ -685,11 +685,11 @@ class RootViewLinkHandlerTest {
 
 			@Test
 			void shouldAddLinkForMyUngeleseneNachrichten() {
-				var modelBuilder = ModelBuilder.fromEntity(rootResource);
+				var model = EntityModel.of(rootResource);
 
-				viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.of(UserProfileTestFactory.ID));
+				viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.of(UserProfileTestFactory.ID));
 
-				assertThat(modelBuilder.buildModel().getLinks()).contains(linkMyUngeleseneNachrichten);
+				assertThat(model.getLinks()).contains(linkMyUngeleseneNachrichten);
 			}
 		}
 
@@ -698,7 +698,7 @@ class RootViewLinkHandlerTest {
 
 			@Test
 			void shouldNotBuildLinkForMyUngeleseneNachrichten() {
-				viewLinkHandler.addGetByUngeleseneNachrichtenLinks(modelBuilder, Optional.empty());
+				viewLinkHandler.addGetByUngeleseneNachrichtenLinks(model, Optional.empty());
 
 				verify(viewLinkHandler, never()).buildGetAllByAssignedToAndUngeleseneNachrichten(UserProfileTestFactory.ID,
 						RootViewLinkHandler.MY_UNGELESENE_NACHRICHTEN_REL);
@@ -707,39 +707,40 @@ class RootViewLinkHandlerTest {
 
 	}
 
-	//	@DisplayName("Test user assistance documentation link")
-	//	@Nested
-	//	class TestDocumentationLink {
+	// @DisplayName("Test user assistance documentation link")
+	// @Nested
+	// class TestDocumentationLink {
 	//
-	//		private static final String DOCUMENTATION_URL = "http://alfa-docs";
+	// private static final String DOCUMENTATION_URL = "http://alfa-docs";
 	//
-	//		@Test
-	//		void shouldNotHaveLinkForUndefinedUrl() {
-	//			var link = viewLinkHandler.toModel(root);
+	// @Test
+	// void shouldNotHaveLinkForUndefinedUrl() {
+	// var link = viewLinkHandler.toModel(root);
 	//
-	//			assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)).isEmpty();
-	//		}
+	// assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)).isEmpty();
+	// }
 	//
-	//		@Test
-	//		void shouldHaveLinkForDefinedUrl() {
-	//			ReflectionTestUtils.setField(viewLinkHandler, "documentationUrl", DOCUMENTATION_URL);
+	// @Test
+	// void shouldHaveLinkForDefinedUrl() {
+	// ReflectionTestUtils.setField(viewLinkHandler, "documentationUrl",
+	// DOCUMENTATION_URL);
 	//
-	//			var link = viewLinkHandler.toModel(root);
+	// var link = viewLinkHandler.toModel(root);
 	//
-	//			assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS))
-	//					.isPresent()
-	//					.map(Link::getHref)
-	//					.hasValue(DOCUMENTATION_URL);
-	//		}
+	// assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS))
+	// .isPresent()
+	// .map(Link::getHref)
+	// .hasValue(DOCUMENTATION_URL);
+	// }
 	//
-	//		@Test
-	//		void shouldNotHaveLinkForEmptyStringUrl() {
-	//			ReflectionTestUtils.setField(viewLinkHandler, "documentationUrl", "");
+	// @Test
+	// void shouldNotHaveLinkForEmptyStringUrl() {
+	// ReflectionTestUtils.setField(viewLinkHandler, "documentationUrl", "");
 	//
-	//			var link = viewLinkHandler.toModel(root);
+	// var link = viewLinkHandler.toModel(root);
 	//
-	//			assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)).isEmpty();
-	//		}
+	// assertThat(link.getLink(RootViewLinkHandler.REL_DOCUMENTATIONS)).isEmpty();
+	// }
 	//
-	//	}
+	// }
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
index 65a005968b4a5ce3a2b3cac0883123ae1dbc928a..446bf2d7d5908164e30aa95456f9743230bbeff9 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidModelAssemblerTest.java
@@ -46,7 +46,7 @@ import org.springframework.hateoas.Link;
 import org.springframework.web.util.UriTemplate;
 
 import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController;
-import de.ozgcloud.alfa.common.LinkedResourceProcessor;
+import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
 import de.ozgcloud.alfa.common.binaryfile.FileId;
 import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.postfach.PostfachMailController;
@@ -67,9 +67,6 @@ class BescheidModelAssemblerTest {
 	@InjectMocks
 	private BescheidModelAssembler assembler;
 
-	@InjectMocks
-	private LinkedResourceProcessor linkedResourceProcessor;
-
 	@Mock
 	private BescheidService bescheidService;
 
@@ -261,9 +258,8 @@ class BescheidModelAssemblerTest {
 			return callToModel(bescheid);
 		}
 
-		@SuppressWarnings("unchecked")
 		private EntityModel<Bescheid> callToModel(Bescheid bescheid) {
-			return (EntityModel<Bescheid>) linkedResourceProcessor.process(assembler.toModel(bescheid));
+			return LinkedResourceTestUtils.processLinkedResource(assembler.toModel(bescheid));
 		}
 	}
 
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java
index 559725a50cf6c9d2ae2a4787e86492b6fc381806..29f78b4071dbc722d9c3d3e6159b0b57a1b6fa2c 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/DocumentModelAssemblerTest.java
@@ -28,20 +28,17 @@ import static org.assertj.core.api.Assertions.*;
 
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
 import org.mockito.Spy;
 import org.springframework.hateoas.EntityModel;
 import org.springframework.hateoas.IanaLinkRelations;
 import org.springframework.hateoas.Link;
 
-import de.ozgcloud.alfa.common.LinkedResourceProcessor;
+import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
 
 class DocumentModelAssemblerTest {
 
 	@Spy
 	private DocumentModelAssembler assembler;
-	@InjectMocks
-	private LinkedResourceProcessor linkedResourceProcessor;
 
 	@Nested
 	class TestToModel {
@@ -64,9 +61,8 @@ class DocumentModelAssemblerTest {
 					.isEqualTo("/api/binaryFiles/" + DocumentTestFactory.FILE_ID);
 		}
 
-		@SuppressWarnings("unchecked")
 		private EntityModel<Document> callToModel() {
-			return (EntityModel<Document>) linkedResourceProcessor.process(assembler.toModel(document));
+			return LinkedResourceTestUtils.processLinkedResource(assembler.toModel(document));
 		}
 	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java
index 3f4db275292b754887a4287662e537e5fba55284..7878bfea3516d09f6f7d4e26a12af9e6506c9783 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationModelAssemblerTest.java
@@ -41,7 +41,7 @@ import org.springframework.hateoas.Link;
 import org.springframework.hateoas.UriTemplate;
 
 import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
-import de.ozgcloud.alfa.common.ModelBuilder;
+import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
 import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
@@ -76,7 +76,7 @@ class CollaborationModelAssemblerTest {
 
 			@Test
 			void shouldHaveLinkToOrganisationsEinheit() {
-				var entityModel = callAssembler();
+				var entityModel = LinkedResourceTestUtils.processLinkedResource(callAssembler());
 
 				assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref)
 						.isEqualTo(OrganisationsEinheitController.PATH + "/" + OrganisationsEinheitTestFactory.ID);
@@ -101,7 +101,7 @@ class CollaborationModelAssemblerTest {
 
 			@Test
 			void shouldHaveLinkToFachstelle() {
-				var entityModel = callAssembler();
+				var entityModel = LinkedResourceTestUtils.processLinkedResource(callAssembler());
 
 				assertThat(entityModel.getLink(REL_ZUSTAENDIGE_STELLE)).get().extracting(Link::getHref)
 						.isEqualTo(FachstelleController.PATH + "/" + FachstelleTestFactory.ID);
@@ -143,7 +143,7 @@ class CollaborationModelAssemblerTest {
 
 			@Test
 			void shouldHaveEntityModel() {
-				var entityModel = ModelBuilder.fromEntity(collaboration).buildModel();
+				var entityModel = EntityModel.of(collaboration);
 				doReturn(entityModel).when(assembler).toModel(collaboration);
 
 				var collectionModel = callAssembler();
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java
index e275742843e2a0256f9d8b4aa3fb2ae45e055c4a..271ce3f758596b7a5426c7dc4917c89f67940784 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/CollaborationVorgangProcessorTest.java
@@ -38,7 +38,6 @@ import org.springframework.web.util.UriComponentsBuilder;
 
 import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
 import de.ozgcloud.alfa.common.EntityModelTestFactory;
-import de.ozgcloud.alfa.common.UserProfileUrlProvider;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserRole;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
@@ -57,8 +56,6 @@ class CollaborationVorgangProcessorTest {
 	@Mock
 	private CurrentUserService currentUserService;
 
-	private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider();
-
 	@Nested
 	class TestProcess {
 
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceTestUtils.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceTestUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..819e2d402ab51afe04b34aa0fc452a83d50cf0f1
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/LinkedResourceTestUtils.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.alfa.common;
+
+import org.springframework.hateoas.EntityModel;
+
+import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
+
+public class LinkedResourceTestUtils {
+
+	public static <T> EntityModel<T> processLinkedResource(EntityModel<T> model) {
+		return new LinkedResourceProcessor<T>(null).process(model);
+	}
+
+	public static <T> EntityModel<T> processUserProfileResource(EntityModel<T> model, UserManagerUrlProvider userManagerUrlProvider) {
+		return new LinkedResourceProcessor<T>(userManagerUrlProvider).process(model);
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/ModelBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/ModelBuilderTest.java
deleted file mode 100644
index 0c53bc9e4909d6f95264e6e69be1d9988105a7f4..0000000000000000000000000000000000000000
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/ModelBuilderTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.alfa.common;
-
-import static org.assertj.core.api.Assertions.*;
-
-import java.util.UUID;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.NullAndEmptySource;
-import org.mockito.Mock;
-import org.springframework.context.ApplicationContext;
-import org.springframework.core.env.Environment;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import lombok.Builder;
-
-class ModelBuilderTest {
-
-	@DisplayName("Add link by annotation if missing")
-	@Nested
-	class TestAddLinkByAnnotationIfMissing {
-
-		@Mock
-		private ApplicationContext context;
-		@Mock
-		private Environment env;
-
-		private TestEntity entity = TestEntityTestFactory.create();
-
-		@Test
-		void shouldHaveAddLinkByLinkedResource() {
-			var model = ModelBuilder.fromEntity(entity).buildModel();
-
-			assertThat(model.getLink(TestController.FILE_REL).get().getHref()).isEqualTo(TestController.PATH + "/" + TestEntityTestFactory.FILE);
-		}
-
-		@ParameterizedTest
-		@NullAndEmptySource
-		void shouldNotAddLinkByLinkedRessourceIfFieldValueIsNotSet(String fileId) {
-			var model = ModelBuilder.fromEntity(TestEntityTestFactory.createBuilder().file(fileId).build()).buildModel();
-
-			assertThat(model.getLink(TestController.FILE_REL)).isEmpty();
-		}
-	}
-
-	@DisplayName("if usermanager is not configured")
-	@Nested
-	class TestNotAddLinkByAnnotationIfNotConfigured {
-
-		private TestEntity entity = TestEntityTestFactory.create();
-
-		@Test
-		void shouldHaveAddLinkByLinkedResource() {
-			var model = ModelBuilder.fromEntity(entity).buildModel();
-
-			assertThat(model.getLink(TestController.FILE_REL).get().getHref()).isEqualTo(TestController.PATH + "/" + TestEntityTestFactory.FILE);
-		}
-	}
-}
-
-@Builder
-class TestEntity {
-
-	@LinkedResource(controllerClass = TestController.class)
-	private String file;
-
-	@LinkedUserProfileResource
-	private String user;
-}
-
-@RequestMapping(TestController.PATH)
-class TestController {
-
-	static final String PATH = "/api/test";
-
-	static final String USER_REL = "user";
-	static final String FILE_REL = "file";
-
-}
-
-class TestEntityTestFactory {
-
-	static final String USER = UUID.randomUUID().toString();
-	static final String FILE = UUID.randomUUID().toString();
-
-	public static TestEntity create() {
-		return createBuilder().build();
-	}
-
-	public static TestEntity.TestEntityBuilder createBuilder() {
-		return TestEntity.builder()
-				.file(FILE)
-				.user(USER);
-	}
-}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java
index 5696644059884d034dde92770ab23f5025a25e8e..edfbc4ca3b81e05badab3893425974cc00a48ad2 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/binaryfile/BinaryFileModelAssemblerTest.java
@@ -36,7 +36,7 @@ import de.ozgcloud.alfa.common.file.OzgFileTestFactory;
 
 class BinaryFileModelAssemblerTest {
 
-	@InjectMocks // NOSONAR
+	@InjectMocks
 	private BinaryFileModelAssembler modelAssembler;
 
 	@Nested
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java
index 441e90c039efc54141b574f2aa44939f88b0aad3..4122969ffbce6e408d19fe31ec962b7f94fe886c 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/historie/HistorieModelAssemblerTest.java
@@ -39,8 +39,7 @@ import org.springframework.hateoas.Link;
 
 import com.thedeanda.lorem.LoremIpsum;
 
-import de.ozgcloud.alfa.common.LinkedResourceProcessor;
-import de.ozgcloud.alfa.common.command.Command;
+import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
 import de.ozgcloud.alfa.common.command.CommandTestFactory;
 import de.ozgcloud.alfa.common.user.UserId;
 import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
@@ -122,8 +121,6 @@ class HistorieModelAssemblerTest {
 	@Nested
 	class TestCreatedByLink {
 
-		@InjectMocks
-		private LinkedResourceProcessor<Command> linkedResourceProcessor;
 		@Mock
 		private UserManagerUrlProvider userManagerUrlProvider;
 
@@ -131,7 +128,8 @@ class HistorieModelAssemblerTest {
 		void shouldExistingAtUser() {
 			when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(ROOT_URL + USER_PROFILES_API_PATH + "%s");
 
-			var model = linkedResourceProcessor.process(modelAssembler.toModel(CommandTestFactory.create()));
+			var model = LinkedResourceTestUtils
+					.processUserProfileResource(modelAssembler.toModel(CommandTestFactory.create()), userManagerUrlProvider);
 
 			assertThat(model.getLink(CREATED_BY)).isPresent().get().extracting(Link::getHref)
 					.isEqualTo(ROOT_URL + USER_PROFILES_API_PATH + UserProfileTestFactory.ID);
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java
index 91c487f0fcd257b9deec41107d166d7d834bf9d8..f9426632645c3e5fa764a52dbae6e97c9abeecad 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java
@@ -41,7 +41,7 @@ import org.springframework.hateoas.IanaLinkRelations;
 import org.springframework.hateoas.Link;
 import org.springframework.hateoas.server.EntityLinks;
 
-import de.ozgcloud.alfa.common.LinkedResourceProcessor;
+import de.ozgcloud.alfa.common.LinkedResourceTestUtils;
 import de.ozgcloud.alfa.common.UserProfileUrlProvider;
 import de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory;
 import de.ozgcloud.alfa.common.user.UserManagerUrlProvider;
@@ -52,7 +52,7 @@ import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
 
 class KommentarModelAssemblerTest {
 
-	private final String PATH = KommentarController.KOMMENTAR_PATH + "/";
+	private static final String PATH = KommentarController.KOMMENTAR_PATH + "/";
 	private static final String REL_CREATED_BY = "createdBy";
 	private static final String USER_MANAGER_URL = UserProfileUrlProviderTestFactory.ROOT_URL
 			+ UserProfileUrlProviderTestFactory.USER_PROFILES_API_PATH;
@@ -99,8 +99,6 @@ class KommentarModelAssemblerTest {
 
 		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
 
-		@InjectMocks
-		private LinkedResourceProcessor<Kommentar> linkedResourceProcessor;
 		@Mock
 		private UserManagerUrlProvider userManagerUrlProvider;
 
@@ -135,7 +133,7 @@ class KommentarModelAssemblerTest {
 		void shouldHaveCreatedByLink() {
 			when(userManagerUrlProvider.getUserProfileTemplate()).thenReturn(ROOT_URL + USER_PROFILES_API_PATH + "%s");
 
-			var model = linkedResourceProcessor.process(buildModel());
+			var model = LinkedResourceTestUtils.processUserProfileResource(buildModel(), userManagerUrlProvider);
 
 			assertThat(model.getLink(REL_CREATED_BY)).isPresent().get().extracting(Link::getHref)
 					.isEqualTo(USER_MANAGER_URL + KommentarTestFactory.CREATED_BY);
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java
index 384aadb5cd9963064dc0ad42f540bd17d88b79d0..e108bfe27f65b0edda495a0f2496ef4b95a681a4 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/loeschanforderung/LoeschAnforderungCommandProcessorTest.java
@@ -29,10 +29,10 @@ import static org.mockito.Mockito.*;
 
 import java.util.Optional;
 
-import org.junit.Test;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
 import org.junit.jupiter.params.provider.EnumSource.Mode;