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 88f929500547e5791e33ff45fa4d4ba383b0a044..703c1e5fabfaed6905cd4e068eba196210e44d27 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
@@ -35,7 +35,6 @@ import org.springframework.hateoas.server.RepresentationModelAssembler;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.collaboration.CollaborationController.CollaborationByVorgangController;
-import de.ozgcloud.alfa.common.CollectionModelBuilder;
 import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
@@ -62,11 +61,9 @@ class CollaborationModelAssembler implements RepresentationModelAssembler<Collab
 
 		var selfLink = linkTo(methodOn(CollaborationByVorgangController.class).getAllByVorgangId(vorgangId)).withSelfRel();
 
-		return CollectionModelBuilder.fromEntities(entityModels)
-				.addLink(selfLink)
-				.ifMatch(() -> entityModels.isEmpty() && vorgangController.isEditable(vorgang))
-				.addLink(() -> buildCreateCollaborationRequestLink(vorgang))
-				.buildModel();
+		return CollectionModel.of(entityModels)
+				.add(selfLink)
+				.addIf(entityModels.isEmpty() && vorgangController.isEditable(vorgang), () -> buildCreateCollaborationRequestLink(vorgang));
 	}
 
 	Link buildCreateCollaborationRequestLink(VorgangWithEingang vorgang) {
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java
deleted file mode 100644
index 01ceb2d404037d97e024e9ff33baa69b6cc88607..0000000000000000000000000000000000000000
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/CollectionModelBuilder.java
+++ /dev/null
@@ -1,94 +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.util.LinkedList;
-import java.util.List;
-import java.util.function.BooleanSupplier;
-import java.util.function.Predicate;
-import java.util.function.Supplier;
-import java.util.stream.Stream;
-
-import org.springframework.hateoas.CollectionModel;
-import org.springframework.hateoas.Link;
-
-import lombok.RequiredArgsConstructor;
-
-public class CollectionModelBuilder<T> {
-
-	private final Iterable<T> entities;
-
-	private final List<Link> links = new LinkedList<>();
-
-	private CollectionModelBuilder(Iterable<T> entities) {
-		this.entities = entities;
-	}
-
-	public static <T> CollectionModelBuilder<T> fromEntities(Iterable<T> entities) {
-		return new CollectionModelBuilder<>(entities);
-	}
-
-	public static <T> CollectionModelBuilder<T> fromEntities(Stream<T> entities) {
-		return new CollectionModelBuilder<>(entities.toList());
-	}
-
-	public CollectionModelBuilder<T> addLink(Link link) {
-		links.add(link);
-		return this;
-	}
-
-	public ConditionalLinkAdder ifMatch(BooleanSupplier guard) {
-		return new ConditionalLinkAdder(guard.getAsBoolean());
-	}
-
-	public ConditionalLinkAdder ifMatch(Predicate<? super Iterable<T>> predicate) {
-		return new ConditionalLinkAdder(predicate.test(entities));
-	}
-
-	public CollectionModel<T> buildModel() {
-		var builtModel = CollectionModel.of(entities);
-		builtModel.add(links);
-		return builtModel;
-	}
-
-	@RequiredArgsConstructor
-	public class ConditionalLinkAdder {
-
-		public final boolean conditionFulfilled;
-
-		public CollectionModelBuilder<T> addLink(Link link) {
-			if (conditionFulfilled) {
-				links.add(link);
-			}
-			return CollectionModelBuilder.this;
-		}
-
-		public CollectionModelBuilder<T> addLink(Supplier<Link> linkSupplier) {
-			if (conditionFulfilled) {
-				links.add(linkSupplier.get());
-			}
-			return CollectionModelBuilder.this;
-		}
-	}
-}
\ No newline at end of file
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 3ed9abdfc3c5b232fe96bab5aa1f106efb3c92b6..ba9d6df0ae625464e05c3dd9c4fff57905723df0 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
@@ -33,7 +33,6 @@ 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.binaryfile.BinaryFileController;
 import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangController;
@@ -72,12 +71,11 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
 	public CollectionModel<EntityModel<Kommentar>> toCollectionModel(Stream<Kommentar> entities, String vorgangId) {
 		var vorgang = vorgangController.getVorgang(vorgangId);
 
-		return CollectionModelBuilder.fromEntities(entities.map(kommentar -> buildModel(kommentar, vorgang)))
-				.addLink(linkTo(KommentarController.class).withSelfRel())
-				.addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE))
-				.ifMatch(() -> vorgangController.isEditable(vorgang))
-				.addLink(linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId))
-						.withRel(REL_CREATE))
-				.buildModel();
+		return CollectionModel.of(entities.map(kommentar -> buildModel(kommentar, vorgang)).toList())
+				.add(linkTo(KommentarController.class).withSelfRel())
+				.add(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE))
+				.addIf(vorgangController.isEditable(vorgang),
+						() -> linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId))
+								.withRel(REL_CREATE));
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java
deleted file mode 100644
index 53e3d279b9ee0174a865852293ec9eb5a7daf849..0000000000000000000000000000000000000000
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/CollectionModelBuilderTest.java
+++ /dev/null
@@ -1,149 +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 static org.mockito.Mockito.*;
-
-import java.util.List;
-import java.util.function.Supplier;
-import java.util.stream.Stream;
-
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
-import org.springframework.hateoas.Link;
-
-import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
-import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage;
-import de.ozgcloud.alfa.wiedervorlage.WiedervorlageTestFactory;
-
-class CollectionModelBuilderTest {
-
-	private final String HREF = "http://test";
-	private final String REL = "rel";
-
-	@Nested
-	class TestBuildModel {
-
-		@Test
-		void shouldBuildModel() {
-			var vorgang = VorgangHeaderTestFactory.create();
-
-			var model = CollectionModelBuilder.fromEntities(List.of(vorgang)).buildModel();
-
-			assertThat(model.getContent()).hasSize(1).first().usingRecursiveComparison().isEqualTo(vorgang);
-		}
-	}
-
-	@Nested
-	class TestAddLink {
-
-		@Test
-		void shouldAddLink() {
-			var model = CollectionModelBuilder.fromEntities(List.of()).addLink(Link.of(HREF, REL)).buildModel();
-
-			assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL);
-		}
-	}
-
-	@Nested
-	class TestIfMatch {
-
-		@Nested
-		class TestWithBooleanSupplier {
-
-			@Test
-			void shouldAddLink() {
-				var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(Link.of(HREF, REL)).buildModel();
-
-				assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL);
-			}
-
-			@Test
-			void shouldNotAddLink() {
-				var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(Link.of(HREF, REL)).buildModel();
-
-				assertThat(model.getLinks()).isEmpty();
-			}
-		}
-
-		@Nested
-		class TestWithPredicate {
-
-			private final Stream<Wiedervorlage> wiedervorlageStream = Stream.of(WiedervorlageTestFactory.create());
-
-			@Test
-			void shouldAddLink() {
-				var model = CollectionModelBuilder.fromEntities(wiedervorlageStream)
-						.ifMatch(wiedervorlagen -> true)
-						.addLink(Link.of(HREF, REL))
-						.buildModel();
-
-				assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL);
-			}
-
-			@Test
-			void shouldNotAddLink() {
-				var model = CollectionModelBuilder.fromEntities(wiedervorlageStream)
-						.ifMatch(wiedervorlagen -> false)
-						.addLink(Link.of(HREF, REL))
-						.buildModel();
-
-				assertThat(model.getLinks()).isEmpty();
-			}
-		}
-
-		@Nested
-		class TestWithLinkSupplier {
-
-			@Mock
-			private Supplier<Link> linkSupplier;
-
-			@Test
-			void shouldAddLink() {
-				when(linkSupplier.get()).thenReturn(Link.of(HREF, REL));
-
-				var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> true).addLink(linkSupplier).buildModel();
-
-				assertThat(model.getLinks()).hasSize(1).first().extracting(Link::getHref, link -> link.getRel().value()).containsExactly(HREF, REL);
-			}
-
-			@Test
-			void shouldNotCallLinkSupplier() {
-				CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(linkSupplier).buildModel();
-
-				verify(linkSupplier, never()).get();
-			}
-
-			@Test
-			void shouldNotAddLink() {
-				var model = CollectionModelBuilder.fromEntities(List.of()).ifMatch(() -> false).addLink(linkSupplier).buildModel();
-
-				assertThat(model.getLinks()).isEmpty();
-			}
-		}
-	}
-
-}
\ No newline at end of file
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 f9426632645c3e5fa764a52dbae6e97c9abeecad..db7c591bad74ecd8aa794161c3c4c38ba89ba561 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
@@ -42,7 +42,6 @@ import org.springframework.hateoas.Link;
 import org.springframework.hateoas.server.EntityLinks;
 
 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;
 import de.ozgcloud.alfa.vorgang.VorgangController;
@@ -164,7 +163,6 @@ class KommentarModelAssemblerTest {
 	@Nested
 	class TestLinksOnCollectionModel {
 
-		private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider();
 		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
 
 		@BeforeEach