diff --git a/collaboration-manager-server/pom.xml b/collaboration-manager-server/pom.xml
index 779646baf2d2700247f8f6849bafa0b771d9aa3d..4b3ac155c5a7203b7c0985b652fa363e25e33f89 100644
--- a/collaboration-manager-server/pom.xml
+++ b/collaboration-manager-server/pom.xml
@@ -83,6 +83,12 @@
 			<artifactId>grpc-server-spring-boot-starter</artifactId>
 		</dependency>
 
+		<!-- TOOLs -->
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-freemarker</artifactId>
+		</dependency>
+
 		<!--TEST-->
 		<dependency>
 			<groupId>de.ozgcloud.command</groupId>
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java
index f7e3362bb1c9cf7ad5df00a9929628be7c936740..1d6ad38b89f1a34fa73f0ed749083a3971ca6ae1 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationEventListener.java
@@ -65,7 +65,15 @@ class CollaborationEventListener {
 	}
 
 	void createCollaborationRequest(Command command) {
-		collaborationService.createCollaborationRequest(collaborationRequestMapper.toCollaborationRequest(command));
+		var collaborationRequest = collaborationRequestMapper.toCollaborationRequest(command);
+		switch (collaborationRequest.getCollaborationLevel()) {
+		case 1 -> collaborationService.createCollaborationRequest(collaborationRequest);
+		case 4 -> collaborationService.createFachstellenBeteiligungRequest(collaborationRequest);
+		default -> {
+			LOG.error("Unknown Collaboration Level: {}", collaborationRequest.getCollaborationLevel());
+			eventPublisher.publishEvent(new CommandFailedEvent(command.getId(), "Unknown Collaboration Level."));
+		}
+		}
 	}
 
 	void runWithSecurityContext(Command command, Consumer<Command> commandExecutor) {
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapper.java
index 846562f0ae9cec516728923474d30265bc950698..6fa338d5d6c6c74b4e812941a18560cbb63ddd56 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapper.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapper.java
@@ -26,8 +26,12 @@ package de.ozgcloud.collaboration;
 import java.util.Map;
 
 import org.apache.commons.collections.MapUtils;
+import org.mapstruct.CollectionMappingStrategy;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.NullValuePropertyMappingStrategy;
+import org.mapstruct.ReportingPolicy;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
@@ -37,7 +41,12 @@ import de.ozgcloud.vorgang.vorgang.GrpcCollaborationRequest;
 // TODO: Das Interface ist umbenannt, um mögliche Konflikte in Vorgang-Manager zu vermeiden. In mapstruct:1.6.0 soll eine neue Annotation
 //  @AnnotateWith eingeführt werden,die es ermöglicht, den Servicenamen zu konfigurieren, dann soll sie  verwendet werden und das Interface kann
 //  wieder einen normalen Namen bekommen.
-@Mapper(uses = { CommandMapper.class })
+@Mapper(uses = { CommandMapper.class },
+		unmappedTargetPolicy = ReportingPolicy.WARN,
+		unmappedSourcePolicy = ReportingPolicy.WARN,
+		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
+		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
 public interface CollaborationManagerCollaborationRequestMapper {
 
 	String ITEM_NAME = "CollaborationRequest";
@@ -47,19 +56,23 @@ public interface CollaborationManagerCollaborationRequestMapper {
 	String FIELD_ITEM_NAME = "itemName";
 	String FIELD_ITEM_BODY = "item";
 
-	@Mapping(target = "collaborationLevel", ignore = true)
 	@Mapping(target = "collaborationVorgangId", ignore = true)
 	@Mapping(target = "createdBy", ignore = true)
 	@Mapping(target = "commandId", source = "id")
 	@Mapping(target = "titel", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_TITEL, command.getBodyObject()))")
 	@Mapping(target = "zustaendigeStelle", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_ZUSTAENDIGE_STELLE, command.getBodyObject()))")
 	@Mapping(target = "anfrage", expression = "java(getStringProperty(CollaborationRequest.PROPERTY_ANFRAGE, command.getBodyObject()))")
+	@Mapping(target = "collaborationLevel", expression = "java(getIntProperty(CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, command.getBodyObject()))")
 	CollaborationRequest toCollaborationRequest(Command command);
 
 	default String getStringProperty(String key, Map<String, Object> propertyMap) {
 		return MapUtils.getString(propertyMap, key);
 	}
 
+	default int getIntProperty(String key, Map<String, Object> propertyMap) {
+		return MapUtils.getIntValue(propertyMap, key);
+	}
+
 	@Mapping(target = "id", ignore = true)
 	@Mapping(target = "status", ignore = true)
 	@Mapping(target = "relationVersion", ignore = true)
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java
index 185050d2ae638a872e76f3ee3eef90ab57cad293..2c782ef72bc88218bcb5606cd3f09d45af8010b6 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java
@@ -42,6 +42,7 @@ public class CollaborationManagerConfiguration {
 	public static final String VORGANG_SERVICE_NAME = "collaboration_VorgangService";
 	public static final String VORGANG_REMOTE_SERVICE_NAME = "collaboration_VorgangRemoteService";
 	public static final String COLLABORATION_SERVICE_NAME = "collaboration_CollaborationService";
+	public static final String TEMPLATE_HANDLER_NAME = "collaboration_TemplateHandler";
 
 	public static final String CALL_CONTEXT_INTERCEPTOR_NAME = "collaboration_CallContextInterceptor";
 	public static final String CALL_CONTEXT_PROVIDER_NAME = "collaboration_CallContextProvider";
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java
index 5b2ba3997e10964fc75c68f81da59f71cb62cd37..5b8c0692c482157e83d59b24b03b8f439c98037a 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationRequest.java
@@ -41,6 +41,7 @@ public class CollaborationRequest {
 	private String commandId;
 	private String vorgangId;
 	private String collaborationVorgangId;
+
 	@Builder.Default
 	private int collaborationLevel = 1;
 
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java
index 40e51fc27c73e3163fe5ddfe082ee5da34b7fd66..5e4b35ca172d084791f1ccdc7f149cbe0e5aec1e 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java
@@ -24,6 +24,9 @@
 package de.ozgcloud.collaboration;
 
 import java.io.OutputStream;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
 
 import jakarta.validation.Valid;
 
@@ -31,11 +34,15 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
+import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.OzgCloudCreateSubCommandsRequest;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.apilib.file.OzgCloudFileId;
 import de.ozgcloud.apilib.file.OzgCloudFileService;
+import de.ozgcloud.collaboration.common.freemarker.TemplateHandler;
 import de.ozgcloud.collaboration.common.user.UserProfileService;
+import de.ozgcloud.collaboration.vorgang.ServiceKonto;
 import de.ozgcloud.collaboration.vorgang.VorgangService;
 import lombok.RequiredArgsConstructor;
 
@@ -46,6 +53,15 @@ public class CollaborationService {
 
 	static final String CREATE_ATTACHED_ITEM_ORDER = "CREATE_ATTACHED_ITEM";
 	static final String SUBCOMMANDS_EXECUTION_MODE = "PARALLEL";
+	public static final String KEY_TEMPLATE_URL = "url";
+
+	public static final String COLLABORATION_NACHRICHT_TEMPLATE = "collaboration.nachrichtTemplate.txt.ftlh";
+	static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT";
+	static final String FIELD_REPLY_OPTION = "replyOption";
+	static final String REPLY_OPTION = "FORBIDDEN";
+	static final String FIELD_SUBJECT = "subject";
+	static final String FIELD_MAIL_BODY = "mailBody";
+	static final String SUBJECT = "Kooperationsanfrage";
 
 	@Qualifier(CollaborationManagerConfiguration.VORGANG_SERVICE_NAME) // NOSONAR
 	private final VorgangService vorgangService;
@@ -59,16 +75,15 @@ public class CollaborationService {
 	private final OzgCloudFileService fileService;
 
 	private final CollaborationManagerCollaborationRequestMapper collaborationRequestMapper;
+	private final CommandMapper commandMapper;
+	@Qualifier(CollaborationManagerConfiguration.TEMPLATE_HANDLER_NAME) // NOSONAR
+	private final TemplateHandler templateHandler;
 
 	public void createCollaborationRequest(@Valid CollaborationRequest collaborationRequest) {
 		var enrichedRequest = enrichCollaborationRequest(collaborationRequest, vorgangService.createCollaborationVorgang(collaborationRequest));
 		commandService.addSubCommands(buildCreateCollaborationRequestRequest(enrichedRequest));
 	}
 
-	CollaborationRequest enrichCollaborationRequest(CollaborationRequest request, String collaborationVorgangId) {
-		return request.toBuilder().collaborationVorgangId(collaborationVorgangId).createdBy(getUserId()).build();
-	}
-
 	String getUserId() {
 		return userProfileService.getUserProfile().getId().toString();
 	}
@@ -85,4 +100,66 @@ public class CollaborationService {
 	public void writeFileContent(OzgCloudFileId fileId, OutputStream out) {
 		fileService.writeFileDataToStream(fileId, out);
 	}
+
+	public void createFachstellenBeteiligungRequest(@Valid CollaborationRequest collaborationRequest) {
+		var vorgang = vorgangService.getVorgang(collaborationRequest.getVorgangId());
+		var enrichedRequest = enrichCollaborationRequest(collaborationRequest, vorgang.getId().toString());
+		var addSubCommandsRequest = buildCreateSubCommandsRequest(enrichedRequest,
+				buildSubCommands(enrichedRequest, vorgang.getHeader().getServiceKonto()));
+		commandService.addSubCommands(addSubCommandsRequest);
+	}
+
+	CollaborationRequest enrichCollaborationRequest(CollaborationRequest request, String collaborationVorgangId) {
+		return request.toBuilder().collaborationVorgangId(collaborationVorgangId).createdBy(getUserId()).build();
+	}
+
+	OzgCloudCreateSubCommandsRequest buildCreateSubCommandsRequest(CollaborationRequest collaborationRequest, List<OzgCloudCommand> subCommands) {
+		return OzgCloudCreateSubCommandsRequest.builder()
+				.parentId(collaborationRequest.getCommandId())
+				.executionMode(SUBCOMMANDS_EXECUTION_MODE)
+				.completedIfSubsCompleted(true)
+				.subCommands(subCommands)
+				.build();
+	}
+
+	List<OzgCloudCommand> buildSubCommands(CollaborationRequest collaborationRequest, ServiceKonto serviceKonto) {
+		return List.of(
+				collaborationRequestMapper.toOzgCloudCommand(collaborationRequest, CREATE_ATTACHED_ITEM_ORDER),
+				buildSendPostfachNachrichtCommand(collaborationRequest, serviceKonto));
+	}
+
+	OzgCloudCommand buildSendPostfachNachrichtCommand(CollaborationRequest collaborationRequest, ServiceKonto serviceKonto) {
+		var bodyObject = buildPostfachSendNachrichtCommandBody(buildPostfachAddress(serviceKonto.getAddresses().getFirst(), serviceKonto.getType()));
+		return OzgCloudCommand.builder()
+				.vorgangId(commandMapper.toOzgCloudVorgangId(collaborationRequest.getVorgangId()))
+				.relationId(commandMapper.mapRelationId(collaborationRequest.getVorgangId()))
+				.order(SEND_POSTFACH_NACHRICHT_ORDER)
+				.createdBy(commandMapper.toOzgCloudUserId(collaborationRequest.getCreatedBy()))
+				.bodyObject(bodyObject)
+				.build();
+	}
+
+	Map<String, Object> buildPostfachAddress(ServiceKonto.PostfachAddress postfachAddress, String serviceKontoType) {
+		return Map.of(
+				ServiceKonto.PostfachAddress.FIELD_TYPE, postfachAddress.getType(),
+				ServiceKonto.PostfachAddress.FIELD_VERSION, postfachAddress.getVersion(),
+				ServiceKonto.PostfachAddress.FIELD_IDENTIFIER, postfachAddress.getIdentifier(),
+				ServiceKonto.FIELD_SERVICEKONTO_TYPE, serviceKontoType);
+	}
+
+	Map<String, Object> buildPostfachSendNachrichtCommandBody(Map<String, Object> postfachAddress) {
+		return Map.of(
+				FIELD_REPLY_OPTION, REPLY_OPTION,
+				FIELD_SUBJECT, SUBJECT,
+				FIELD_MAIL_BODY, getAnfrageText(),
+				ServiceKonto.FIELD_POSTFACH_ADDRESS, postfachAddress);
+	}
+
+	String getAnfrageText() {
+		return templateHandler.fillTemplate(COLLABORATION_NACHRICHT_TEMPLATE, getTemplateParameters());
+	}
+
+	Map<String, Object> getTemplateParameters() {
+		return Collections.emptyMap();
+	}
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandler.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf2b56405377ea25bdadceb6124a62e71decfef7
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandler.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2024 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.collaboration.common.freemarker;
+
+import java.io.IOException;
+import java.io.StringWriter;
+
+import org.springframework.stereotype.Component;
+
+import de.ozgcloud.collaboration.CollaborationManagerConfiguration;
+import de.ozgcloud.common.errorhandling.TechnicalException;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+import lombok.RequiredArgsConstructor;
+
+@Component(CollaborationManagerConfiguration.TEMPLATE_HANDLER_NAME)
+@RequiredArgsConstructor
+public class TemplateHandler {
+
+	private final Configuration freemarkerConfig;
+
+	public String getRawTemplate(String templateName) {
+		return getTemplate(templateName).toString();
+	}
+
+	public String fillTemplate(String templateName, Object dataModel) {
+		try {
+			var template = getTemplate(templateName);
+			var stringWriter = new StringWriter();
+			template.process(dataModel, stringWriter);
+			return stringWriter.toString();
+
+		} catch (IOException | TemplateException e) {
+			throw new TechnicalException("Error filling template", e);
+		}
+	}
+
+	private Template getTemplate(String templateName) {
+		try {
+			return freemarkerConfig.getTemplate(templateName);
+		} catch (IOException e) {
+			throw new TechnicalException("Error loading mail template", e);
+		}
+	}
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/UserProfileService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/UserProfileService.java
index 2c20ed8b7dc8f4c7a33fc1f9f8e6f29ecce5fc2f..bc2d3eb7d30f86954cf98ef31c206083e61a978a 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/UserProfileService.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/UserProfileService.java
@@ -25,6 +25,7 @@ package de.ozgcloud.collaboration.common.user;
 
 import java.util.Optional;
 
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.user.OzgCloudUserId;
@@ -38,6 +39,7 @@ import lombok.RequiredArgsConstructor;
 @RequiredArgsConstructor
 public class UserProfileService {
 
+	@Qualifier(CollaborationManagerConfiguration.CURRENT_USER_SERVICE_NAME) // NOSONAR
 	private final CurrentUserService currentUserService;
 	private final Optional<OzgCloudUserProfileService> ozgCloudUserProfileService;
 	private final CollaborationUserProfileMapper mapper;
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationServiceKontoMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationServiceKontoMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..33a3509b62084ec4fc79f0ddd96fec0c1c3ebcea
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationServiceKontoMapper.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.mapstruct.CollectionMappingStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.NullValuePropertyMappingStrategy;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudPostfachAddressIdentifier;
+import de.ozgcloud.apilib.vorgang.OzgCloudServiceKonto;
+import de.ozgcloud.apilib.vorgang.OzgCloudTrustLevel;
+import de.ozgcloud.common.datatype.StringBasedValue;
+import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
+import de.ozgcloud.vorgang.vorgang.GrpcServiceKonto;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN,
+		unmappedSourcePolicy = ReportingPolicy.WARN,
+		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE,
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
+		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED,
+		uses = GrpcObjectMapper.class)
+public interface CollaborationServiceKontoMapper {
+
+	@Mapping(target = "addresses", ignore = true)
+	@Mapping(target = "address.identifier", source = "address.identifiers")
+	ServiceKonto fromServiceKonto(OzgCloudServiceKonto serviceKonto);
+
+	default TrustLevel fromTrustLevel(OzgCloudTrustLevel value) {
+		return TrustLevel.from(value);
+	}
+
+	default Map<String, Object> fromPostfachAddressIdentifier(Collection<OzgCloudPostfachAddressIdentifier> postfachAddressIdentifier) {
+		if (Objects.isNull(postfachAddressIdentifier)) {
+			return Collections.emptyMap();
+		}
+		return postfachAddressIdentifier.stream()
+				.collect(Collectors.toMap(OzgCloudPostfachAddressIdentifier::getName, OzgCloudPostfachAddressIdentifier::getValue));
+	}
+
+	default String fromStringBasedValue(StringBasedValue value) {
+		return value.toString();
+	}
+
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "typeBytes", ignore = true)
+	@Mapping(target = "trustLevelBytes", ignore = true)
+	@Mapping(target = "removePostfachAddresses", ignore = true)
+	@Mapping(target = "postfachAddressesOrBuilderList", ignore = true)
+	@Mapping(target = "postfachAddressesBuilderList", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "defaultInstanceForType", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+
+	@Mapping(target = "postfachAddressesList", source = "addresses")
+	GrpcServiceKonto toServiceKonto(ServiceKonto serviceKonto);
+
+	default String toString(TrustLevel trustLevel) {
+		return trustLevel.getValue();
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java
index 831d1b8d30c4be1d00e17a872cefcd6df2631299..55a2f3431f0cee14a4383cc4bc0bfcebb6280032 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java
@@ -1,3 +1,26 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
 
 import java.util.List;
@@ -15,7 +38,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper;
 import de.ozgcloud.collaboration.GrpcVorgang;
 
-@Mapper(uses = { OzgCloudVorgangIdMapper.class, CollaborationEingangMapper.class, CollaborationRequestMapper.class }, //
+@Mapper(uses = { OzgCloudVorgangIdMapper.class, CollaborationEingangMapper.class, CollaborationRequestMapper.class,
+		CollaborationServiceKontoMapper.class }, //
 		unmappedTargetPolicy = ReportingPolicy.WARN, //
 		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //
 		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, //
@@ -24,9 +48,13 @@ public interface CollaborationVorgangMapper {
 
 	@Mapping(target = "collaborationRequest", ignore = true)
 	@Mapping(target = "eingang", ignore = true)
+	@Mapping(target = "header.serviceKonto", source = "header.serviceKonto")
 	Vorgang fromOzgCloudVorgang(OzgCloudVorgang vorgang);
 
-	@Mapping(target = "eingang", source = "eingangs")
+	@Mapping(target = "headerOrBuilder", ignore = true)
+	@Mapping(target = "eingangOrBuilder", ignore = true)
+	@Mapping(target = "defaultInstanceForType", ignore = true)
+	@Mapping(target = "collaborationRequestOrBuilder", ignore = true)
 	@Mapping(target = "mergeFrom", ignore = true)
 	@Mapping(target = "clearField", ignore = true)
 	@Mapping(target = "clearOneof", ignore = true)
@@ -39,6 +67,8 @@ public interface CollaborationVorgangMapper {
 	@Mapping(target = "vorgangNameBytes", ignore = true)
 	@Mapping(target = "vorgangNummerBytes", ignore = true)
 	@Mapping(target = "allFields", ignore = true)
+
+	@Mapping(target = "eingang", source = "eingangs")
 	GrpcVorgang toGrpc(Vorgang vorgang);
 
 	default String toString(OzgCloudVorgangId id) {
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/ServiceKonto.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/ServiceKonto.java
new file mode 100644
index 0000000000000000000000000000000000000000..08c511c3731fd1a1feb09e9514c6c6adc411d2a4
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/ServiceKonto.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import java.util.List;
+import java.util.Map;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+
+@Builder
+@Getter
+public class ServiceKonto {
+
+	public static final String FIELD_SERVICEKONTO_TYPE = "serviceKontoType";
+	public static final String FIELD_POSTFACH_ADDRESS = "postfachAddress";
+
+	private String type;
+	private TrustLevel trustLevel;
+	@Singular
+	private List<PostfachAddress> addresses;
+
+	@Builder
+	@Getter
+	public static class PostfachAddress {
+
+		public static final String FIELD_VERSION = "version";
+		public static final String FIELD_TYPE = "type";
+		public static final String FIELD_IDENTIFIER = "identifier";
+
+		private String version;
+		private int type;
+		private Map<String, Object> identifier;
+	}
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/TrustLevel.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/TrustLevel.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab60dd0de13352bb91ea5515e026338b52c4e985
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/TrustLevel.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import java.util.Arrays;
+
+import org.mapstruct.ObjectFactory;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudTrustLevel;
+import lombok.Getter;
+
+@Getter
+public enum TrustLevel {
+
+	LEVEL_1("STORK-QAA-Level-1"),
+	LEVEL_2("STORK-QAA-Level-2"),
+	LEVEL_3("STORK-QAA-Level-3"),
+	LEVEL_4("STORK-QAA-Level-4");
+
+	private final String value;
+	private final int intValue;
+
+	TrustLevel(String value) {
+		this.value = value;
+		this.intValue = extractIntValue();
+	}
+
+	@ObjectFactory
+	public static TrustLevel from(OzgCloudTrustLevel value) {
+		return Arrays.stream(TrustLevel.values()).filter(trustLevel -> trustLevel.getValue().equals(value.toString())).findFirst()
+				.orElseThrow(() -> new IllegalArgumentException("Unknown TrustLevel: '" + value + "'"));
+	}
+
+	private int extractIntValue() {
+		return Integer.parseInt(value.substring(value.length() - 1));
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java
index 095e30a09012434d478ab2ab51ed6932b7fbf7ec..a23846b9a48385d307a84e14244f6b571ddc5a54 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java
@@ -9,8 +9,11 @@ import lombok.ToString;
 @ToString
 @Getter
 @Builder
-class VorgangHeader {
+public class VorgangHeader {
 
 	private ZonedDateTime createdAt;
 	private String aktenzeichen;
+	@ToString.Exclude
+	private ServiceKonto serviceKonto;
+
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh b/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh
new file mode 100644
index 0000000000000000000000000000000000000000..5874936fb45fd176e05cef6a7e888b4b6fb0379c
--- /dev/null
+++ b/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh
@@ -0,0 +1,7 @@
+Hallo Fachstelle,
+
+bitte bearbeiten:
+${url!"http://www.host.local"}
+
+Danke,
+Verwaltung
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerITCase.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerITCase.java
index fbb35a1212b534eeed6a723475225b7742e2e902..641aec972ec11ef3a6bcc27022c91556b2206f5f 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerITCase.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerITCase.java
@@ -28,11 +28,9 @@ import static org.mockito.Mockito.*;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.context.ApplicationEventPublisher;
 
-import de.ozgcloud.apilib.file.OzgCloudFileService;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEventTestFactory;
 import de.ozgcloud.command.CommandTestFactory;
@@ -47,9 +45,6 @@ class CollaborationEventListenerITCase {
 	@Autowired
 	private ApplicationEventPublisher publisher;
 
-	@MockBean
-	private OzgCloudFileService fileService;
-
 	@Nested
 	class TestOnCreateCollaborationRequest {
 
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java
index 156357796a36456b42b4a643c109290a7c154c31..36cb45c71ebf7b08ac03085931b2b3661a236e3a 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationEventListenerTest.java
@@ -30,8 +30,11 @@ import static org.mockito.Mockito.*;
 import java.util.function.Consumer;
 
 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.ValueSource;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.InjectMocks;
@@ -85,23 +88,49 @@ class CollaborationEventListenerTest {
 
 		private final Command command = CommandTestFactory.createBuilder().build();
 
-		@Mock
-		private CollaborationRequest collaborationRequest;
+		@Captor
+		private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor;
 
 		@Test
 		void shouldCallCommandMapper() {
+			when(commandMapper.toCollaborationRequest(any())).thenReturn(CollaborationRequestTestFactory.create());
+
 			eventListener.createCollaborationRequest(command);
 
 			verify(commandMapper).toCollaborationRequest(command);
 		}
 
 		@Test
-		void shouldCallCollaborationService() {
+		void shouldCallCreateCollaborationRequest() {
+			var collaborationRequest = CollaborationRequestTestFactory.create();
 			when(commandMapper.toCollaborationRequest(any())).thenReturn(collaborationRequest);
 
 			eventListener.createCollaborationRequest(command);
 
-			verify(collaborationService).createCollaborationRequest(any());
+			verify(collaborationService).createCollaborationRequest(collaborationRequest);
+		}
+
+		@Test
+		void shouldCallCreateFachstellenBeteiligungRequest() {
+			var collaborationRequest = CollaborationRequestTestFactory.createBuilder().collaborationLevel(4).build();
+			when(commandMapper.toCollaborationRequest(any())).thenReturn(collaborationRequest);
+
+			eventListener.createCollaborationRequest(command);
+
+			verify(collaborationService).createFachstellenBeteiligungRequest(collaborationRequest);
+		}
+
+		@DisplayName("should decline request")
+		@ParameterizedTest(name = "when collaboration level is {0}")
+		@ValueSource(ints = { 0, 2, 3, 5 })
+		void shouldDeclineRequest(int collaborationLevel) {
+			var collaborationRequest = CollaborationRequestTestFactory.createBuilder().collaborationLevel(collaborationLevel).build();
+			when(commandMapper.toCollaborationRequest(any())).thenReturn(collaborationRequest);
+
+			eventListener.createCollaborationRequest(command);
+
+			verify(eventPublisher).publishEvent(commandFailedEventCaptor.capture());
+			assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(command.getId());
 		}
 	}
 
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapperTest.java
index 4a8e67c2aacd0ba26ff32d76f55e2826d48ee553..a2d3e144c4aee4c3e33292c94beeabd531058086 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapperTest.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationManagerCollaborationRequestMapperTest.java
@@ -247,7 +247,7 @@ class CollaborationManagerCollaborationRequestMapperTest {
 		void shouldSetCollaborationLevel() {
 			var result = toItemMap();
 
-			assertThat(result).containsEntry(CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, CollaborationRequestTestFactory.COLLABORATION_lEVEL);
+			assertThat(result).containsEntry(CollaborationRequest.PROPERTY_COLLABORATION_LEVEL, CollaborationRequestTestFactory.COLLABORATION_LEVEL);
 		}
 
 		private Map<String, Object> toItemMap() {
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java
index def4d10956d30890b57d3cf9de9adc14ac4620c6..cd688e0978b77b7dde491dd71892eac7911d99b4 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationRequestTestFactory.java
@@ -32,7 +32,7 @@ public class CollaborationRequestTestFactory {
 	public static final String ANFRAGE = "Anfrage";
 	public static final String ZUSTAENDIGE_STELLE = "zustaendige-stelle";
 	public static final String COLLABORATION_VORGAENG_ID = "collaboration-vorgaeng-id";
-	public static final int COLLABORATION_lEVEL = 1;
+	public static final int COLLABORATION_LEVEL = 1;
 
 	public static CollaborationRequest create() {
 		return createBuilder().build();
@@ -47,6 +47,6 @@ public class CollaborationRequestTestFactory {
 				.titel(TITEL)
 				.anfrage(ANFRAGE)
 				.zustaendigeStelle(ZUSTAENDIGE_STELLE)
-				.collaborationLevel(COLLABORATION_lEVEL);
+				.collaborationLevel(COLLABORATION_LEVEL);
 	}
 }
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java
index f76bc81cecb3e09161f1713ea87bb52e9bea2171..52847525b2a2aa2cd7f1758642374280ab5fe616 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java
@@ -33,9 +33,7 @@ import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.NullAndEmptySource;
 import org.junit.jupiter.params.provider.ValueSource;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.mock.mockito.MockBean;
 
-import de.ozgcloud.apilib.file.OzgCloudFileService;
 import de.ozgcloud.common.test.ITCase;
 
 @ITCase
@@ -44,9 +42,6 @@ class CollaborationServiceITCase {
 	@Autowired
 	private CollaborationService service;
 
-	@MockBean
-	private OzgCloudFileService fileService;
-
 	@Nested
 	class TestCreateCollaborationRequest {
 
@@ -80,4 +75,38 @@ class CollaborationServiceITCase {
 			Assertions.assertThrows(ConstraintViolationException.class, () -> service.createCollaborationRequest(request));
 		}
 	}
+
+	@Nested
+	class TestCreateFachstellenBeteiligungRequest {
+
+		@DisplayName("validate titel")
+		@ParameterizedTest(name = "should throw exception on titel: \"{0}\"")
+		@NullAndEmptySource
+		@ValueSource(strings = { StringUtils.SPACE })
+		void shouldValidateTitel(String titel) {
+			var request = CollaborationRequestTestFactory.createBuilder().titel(titel).build();
+
+			Assertions.assertThrows(ConstraintViolationException.class, () -> service.createFachstellenBeteiligungRequest(request));
+		}
+
+		@DisplayName("validate anfrage")
+		@ParameterizedTest(name = "should throw exception on anfrage: \"{0}\"")
+		@NullAndEmptySource
+		@ValueSource(strings = { StringUtils.SPACE })
+		void shouldValidateAnfrage(String anfrage) {
+			var request = CollaborationRequestTestFactory.createBuilder().anfrage(anfrage).build();
+
+			Assertions.assertThrows(ConstraintViolationException.class, () -> service.createFachstellenBeteiligungRequest(request));
+		}
+
+		@DisplayName("validate zustaendigeStelle")
+		@ParameterizedTest(name = "should throw exception oon zustaendigeStelle: \"{0}\"")
+		@NullAndEmptySource
+		@ValueSource(strings = { StringUtils.SPACE })
+		void shouldValidateCollaborationRequestTitel(String zustaendigeStelle) {
+			var request = CollaborationRequestTestFactory.createBuilder().zustaendigeStelle(zustaendigeStelle).build();
+
+			Assertions.assertThrows(ConstraintViolationException.class, () -> service.createFachstellenBeteiligungRequest(request));
+		}
+	}
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java
index 68b30f7562caebea5f60a864dc746a1c88d2ee11..b3bd95fbac0348b66f5a4a1a8b28ac78406c2127 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java
@@ -28,6 +28,8 @@ import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -41,13 +43,26 @@ import org.mockito.Spy;
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.OzgCloudCreateSubCommandsRequest;
+import de.ozgcloud.apilib.common.command.OzgCloudCreateSubCommandsRequestTestFactory;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
+import de.ozgcloud.apilib.common.datatypes.GenericId;
 import de.ozgcloud.apilib.file.OzgCloudFileId;
 import de.ozgcloud.apilib.file.OzgCloudFileService;
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+import de.ozgcloud.collaboration.common.freemarker.TemplateHandler;
 import de.ozgcloud.collaboration.common.user.UserId;
 import de.ozgcloud.collaboration.common.user.UserProfile;
 import de.ozgcloud.collaboration.common.user.UserProfileService;
+import de.ozgcloud.collaboration.vorgang.PostfachAddressTestFactory;
+import de.ozgcloud.collaboration.vorgang.ServiceKonto;
+import de.ozgcloud.collaboration.vorgang.ServiceKontoTestFactory;
+import de.ozgcloud.collaboration.vorgang.Vorgang;
+import de.ozgcloud.collaboration.vorgang.VorgangHeaderTestFactory;
 import de.ozgcloud.collaboration.vorgang.VorgangService;
+import de.ozgcloud.collaboration.vorgang.VorgangTestFactory;
 import de.ozgcloud.command.CommandTestFactory;
+import de.ozgcloud.common.datatype.StringBasedValue;
 
 class CollaborationServiceTest {
 
@@ -65,6 +80,10 @@ class CollaborationServiceTest {
 	private CollaborationManagerCollaborationRequestMapper collaborationRequestMapper;
 	@Mock
 	private OzgCloudFileService fileService;
+	@Mock
+	private CommandMapper commandMapper;
+	@Mock
+	private TemplateHandler templateHandler;
 
 	@Nested
 	class TestCreateCollaborationRequest {
@@ -250,4 +269,357 @@ class CollaborationServiceTest {
 			verify(fileService).writeFileDataToStream(fileId, stream);
 		}
 	}
+
+	@Nested
+	class TestCreateFachstellenBeteiligungRequest {
+
+		private static final Vorgang VORGANG = VorgangTestFactory.create();
+		private static final CollaborationRequest ENRICHED_REQUEST = CollaborationRequestTestFactory.create();
+
+		@Mock
+		private OzgCloudCommand subCommand;
+
+		@BeforeEach
+		void init() {
+			doReturn(List.of(subCommand)).when(service).buildSubCommands(any(), any());
+			when(vorgangService.getVorgang(any())).thenReturn(VORGANG);
+			doReturn(ENRICHED_REQUEST).when(service).enrichCollaborationRequest(any(), any());
+		}
+
+		@Test
+		void shouldCallGetVorgang() {
+			service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create());
+
+			verify(vorgangService).getVorgang(CommandTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldCallEnrichCollaborationRequest() {
+			var collaborationRequest = CollaborationRequestTestFactory.create();
+
+			service.createFachstellenBeteiligungRequest(collaborationRequest);
+
+			verify(service).enrichCollaborationRequest(collaborationRequest, VorgangTestFactory.ID.toString());
+		}
+
+		@Test
+		void shouldCallBuildSubCommands() {
+			service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create());
+
+			verify(service).buildSubCommands(ENRICHED_REQUEST, VorgangHeaderTestFactory.SERVICE_KONTO);
+		}
+
+		@Test
+		void shouldCallBuildCreateSubCommandsRequest() {
+			service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create());
+
+			verify(service).buildCreateSubCommandsRequest(ENRICHED_REQUEST, List.of(subCommand));
+		}
+
+		@Test
+		void shouldCallAddSubCommands() {
+			var addSubCommandsRequest = OzgCloudCreateSubCommandsRequestTestFactory.create();
+			doReturn(addSubCommandsRequest).when(service).buildCreateSubCommandsRequest(any(), any());
+
+			service.createFachstellenBeteiligungRequest(CollaborationRequestTestFactory.create());
+
+			verify(commandService).addSubCommands(addSubCommandsRequest);
+		}
+	}
+
+	@Nested
+	class TestBuildCreateSubCommandsRequest {
+
+		@Mock
+		private OzgCloudCommand subCommand;
+
+		@Test
+		void shouldSetParentId() {
+			var result = buildCreateSubCommandsRequest();
+
+			assertThat(result.getParentId()).isEqualTo(CommandTestFactory.ID);
+		}
+
+		@Test
+		void shouldSetExecutionMode() {
+			var result = buildCreateSubCommandsRequest();
+
+			assertThat(result.getExecutionMode()).isEqualTo(CollaborationService.SUBCOMMANDS_EXECUTION_MODE);
+		}
+
+		@Test
+		void shouldSetCompletedIfSubsCompleted() {
+			var result = buildCreateSubCommandsRequest();
+
+			assertThat(result.isCompletedIfSubsCompleted()).isTrue();
+		}
+
+		@Test
+		void shouldSetSubCommands() {
+			var result = buildCreateSubCommandsRequest();
+
+			assertThat(result.getSubCommands()).containsExactly(subCommand);
+		}
+
+		private OzgCloudCreateSubCommandsRequest buildCreateSubCommandsRequest() {
+			return service.buildCreateSubCommandsRequest(CollaborationRequestTestFactory.create(), List.of(subCommand));
+		}
+	}
+
+	@Nested
+	class TestBuildSubCommands {
+
+		private static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create();
+
+		@Mock
+		private OzgCloudCommand persistCollaborationRequestCommand;
+		@Mock
+		private OzgCloudCommand sendPostfachNachrichtCommand;
+
+		@BeforeEach
+		void init() {
+			when(collaborationRequestMapper.toOzgCloudCommand(any(), any())).thenReturn(persistCollaborationRequestCommand);
+			doReturn(sendPostfachNachrichtCommand).when(service).buildSendPostfachNachrichtCommand(any(), any());
+		}
+
+		@Test
+		void shouldCallCollaborationRequestMapper() {
+			buildSubCommands();
+
+			verify(collaborationRequestMapper).toOzgCloudCommand(any(), eq(CollaborationService.CREATE_ATTACHED_ITEM_ORDER));
+		}
+
+		@Test
+		void shouldCallBuildSendPostfachNachrichtCommand() {
+			buildSubCommands();
+
+			verify(service).buildSendPostfachNachrichtCommand(COLLABORATION_REQUEST, VorgangHeaderTestFactory.SERVICE_KONTO);
+		}
+
+		@Test
+		void shouldAddSubCommands() {
+			var result = buildSubCommands();
+
+			assertThat(result).containsExactly(persistCollaborationRequestCommand, sendPostfachNachrichtCommand);
+		}
+
+		private List<OzgCloudCommand> buildSubCommands() {
+			return service.buildSubCommands(COLLABORATION_REQUEST, VorgangHeaderTestFactory.SERVICE_KONTO);
+		}
+	}
+
+	@Nested
+	class TestBuildSendPostfachNachrichtCommand {
+
+		private static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create();
+		private static final ServiceKonto.PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
+		private static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.createBuilder().clearAddresses().address(POSTFACH_ADDRESS).build();
+		private static final OzgCloudUserId OZG_CLOUD_ID = OzgCloudUserId.from(CommandTestFactory.CREATED_BY);
+		private static final Map<String, Object> OBJECT_MAP = Map.of("key", "value");
+		private static final OzgCloudVorgangId VORGANG_ID = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString());
+		private static final StringBasedValue RELATION_ID = GenericId.from(VorgangTestFactory.ID.toString());
+
+		@BeforeEach
+		void init() {
+			when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(VORGANG_ID);
+			when(commandMapper.mapRelationId(anyString())).thenReturn(RELATION_ID);
+			when(commandMapper.toOzgCloudUserId(anyString())).thenReturn(OZG_CLOUD_ID);
+			doReturn(OBJECT_MAP).when(service).buildPostfachSendNachrichtCommandBody(any());
+		}
+
+		@Test
+		void shouldCallBuildPostfachAddress() {
+			buildSendPostfachNachrichtCommand();
+
+			verify(service).buildPostfachAddress(POSTFACH_ADDRESS, ServiceKontoTestFactory.TYPE);
+		}
+
+		@Test
+		void shouldCallBuildSenNachrichtCommandBody() {
+			var postfachAddressMap = Map.<String, Object>of("key", "value");
+			doReturn(postfachAddressMap).when(service).buildPostfachAddress(any(), any());
+
+			buildSendPostfachNachrichtCommand();
+
+			verify(service).buildPostfachSendNachrichtCommandBody(postfachAddressMap);
+		}
+
+		@Test
+		void shouldSetBodyObject() {
+			var result = buildSendPostfachNachrichtCommand();
+
+			assertThat(result.getBodyObject()).isSameAs(OBJECT_MAP);
+		}
+
+		@Test
+		void shouldCallMapVorgangId() {
+			buildSendPostfachNachrichtCommand();
+
+			verify(commandMapper).toOzgCloudVorgangId(CommandTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldSetVorgangId() {
+			var result = buildSendPostfachNachrichtCommand();
+
+			assertThat(result.getVorgangId()).isEqualTo(VORGANG_ID);
+		}
+
+		@Test
+		void shouldCallMapRelationId() {
+			buildSendPostfachNachrichtCommand();
+
+			verify(commandMapper).mapRelationId(CommandTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldSetRelationId() {
+			var result = buildSendPostfachNachrichtCommand();
+
+			assertThat(result.getRelationId()).isEqualTo(RELATION_ID);
+		}
+
+		@Test
+		void shouldSetOrder() {
+			var result = buildSendPostfachNachrichtCommand();
+
+			assertThat(result.getOrder()).isEqualTo(CollaborationService.SEND_POSTFACH_NACHRICHT_ORDER);
+		}
+
+		@Test
+		void shouldCallMapToOzgCloudUserId() {
+			buildSendPostfachNachrichtCommand();
+
+			verify(commandMapper).toOzgCloudUserId(CommandTestFactory.CREATED_BY);
+		}
+
+		@Test
+		void shouldSetCreatedBy() {
+			var result = buildSendPostfachNachrichtCommand();
+
+			assertThat(result.getCreatedBy()).isEqualTo(OZG_CLOUD_ID);
+		}
+
+		private OzgCloudCommand buildSendPostfachNachrichtCommand() {
+			return service.buildSendPostfachNachrichtCommand(COLLABORATION_REQUEST, SERVICE_KONTO);
+		}
+	}
+
+	@Nested
+	class TestBuildPostfachAddress {
+
+		@Test
+		void shouldSetType() {
+			var result = buildPostfachAddress();
+
+			assertThat(result).containsEntry(ServiceKonto.PostfachAddress.FIELD_TYPE, PostfachAddressTestFactory.TYPE);
+		}
+
+		@Test
+		void shouldSetVersion() {
+			var result = buildPostfachAddress();
+
+			assertThat(result).containsEntry(ServiceKonto.PostfachAddress.FIELD_VERSION, PostfachAddressTestFactory.VERSION);
+		}
+
+		@Test
+		void shouldSetIdentifier() {
+			var result = buildPostfachAddress();
+
+			assertThat(result).extracting(ServiceKonto.PostfachAddress.FIELD_IDENTIFIER, MAP).containsValue(PostfachAddressTestFactory.POSTFACH_ID);
+		}
+
+		@Test
+		void shouldSetServicekontoType() {
+			var result = buildPostfachAddress();
+
+			assertThat(result).containsEntry(ServiceKonto.FIELD_SERVICEKONTO_TYPE, ServiceKontoTestFactory.TYPE);
+		}
+
+		private Map<String, Object> buildPostfachAddress() {
+			return service.buildPostfachAddress(PostfachAddressTestFactory.create(), ServiceKontoTestFactory.TYPE);
+		}
+	}
+
+	@Nested
+	class TestBuildSendNachrichtCommandBody {
+
+		private static final Map<String, Object> POSTFACH_ADDRESS = Map.of("key", "value");
+
+		@BeforeEach
+		void init() {
+			doReturn(CollaborationRequestTestFactory.ANFRAGE).when(service).getAnfrageText();
+		}
+
+		@Test
+		void shouldSetReplyOption() {
+			var result = buildSendNachrichtCommandBody();
+
+			assertThat(result).containsEntry(CollaborationService.FIELD_REPLY_OPTION, CollaborationService.REPLY_OPTION);
+		}
+
+		@Test
+		void shouldSetSubject() {
+			var result = buildSendNachrichtCommandBody();
+
+			assertThat(result).containsEntry(CollaborationService.FIELD_SUBJECT, CollaborationService.SUBJECT);
+		}
+
+		@Test
+		void shouldSetMailBody() {
+			var result = buildSendNachrichtCommandBody();
+
+			assertThat(result).containsEntry(CollaborationService.FIELD_MAIL_BODY, CollaborationRequestTestFactory.ANFRAGE);
+		}
+
+		private Map<String, Object> buildSendNachrichtCommandBody() {
+			return service.buildPostfachSendNachrichtCommandBody(POSTFACH_ADDRESS);
+		}
+	}
+
+	@Nested
+	class TestGetDefaultAnfrageText {
+
+		private static final String DEFAULT_MAIL_TEXT = "default mail text";
+
+		@BeforeEach
+		void init() {
+			when(templateHandler.fillTemplate(anyString(), any())).thenReturn(DEFAULT_MAIL_TEXT);
+		}
+
+		@Test
+		void shouldCallGetTemplateParameters() {
+			service.getAnfrageText();
+
+			verify(service).getTemplateParameters();
+		}
+
+		@Test
+		void shouldCallTemplateHandler() {
+			var templateParameters = Map.<String, Object>of("key", "value ");
+			doReturn(templateParameters).when(service).getTemplateParameters();
+
+			service.getAnfrageText();
+
+			verify(templateHandler).fillTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE, templateParameters);
+		}
+
+		@Test
+		void shouldReturnDefaultMailText() {
+			var result = service.getAnfrageText();
+
+			assertThat(result).isEqualTo(DEFAULT_MAIL_TEXT);
+		}
+	}
+
+	@Nested
+	class TestGetTemplateParameters {
+
+		@Test
+		void shouldReturnTemplateParameters() {
+			var result = service.getTemplateParameters();
+
+			assertThat(result).isEmpty();
+		}
+	}
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java
index 9bf930073cd946f9f074a695515798666b7153f9..bf468f441f461a5b7f3ec2d1c38c2b2fdd4254a6 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationTestApplication.java
@@ -34,6 +34,7 @@ import org.springframework.security.authentication.AuthenticationTrustResolverIm
 
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapperImpl;
+import de.ozgcloud.apilib.file.OzgCloudFileService;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
 import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService;
 import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangMapper;
@@ -52,6 +53,8 @@ public class CollaborationTestApplication {
 	private OzgCloudVorgangMapper vorgangMapper;
 	@MockBean
 	private CollaborationManagerCallContextProvider contextProvider;
+	@MockBean
+	private OzgCloudFileService ozgCloudFileService;
 
 	public static void main(String[] args) {
 		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
@@ -72,4 +75,5 @@ public class CollaborationTestApplication {
 	OzgCloudVorgangService ozgCloudVorgangService() {
 		return new GrpcOzgCloudVorgangService(vorgangServiceStub, vorgangMapper, vorgangStubMapper, contextProvider);
 	}
+
 }
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..faac634359143e548636ed8bf0503c5719555ea3
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2024 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.collaboration.common.freemarker;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import de.ozgcloud.collaboration.CollaborationService;
+import de.ozgcloud.common.test.ITCase;
+
+@ITCase
+class TemplateHandlerITCase {
+
+	@Autowired
+	private TemplateHandler handler;
+
+	@DisplayName("Get raw template")
+	@Nested
+	class TestGetRawTemplate {
+
+		@Test
+		void shouldReturnTemplateAsString() {
+			var content = handler.getRawTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE);
+
+			assertThat(content)
+					.contains("Hallo Fachstelle,")
+					.contains("bitte bearbeiten:")
+					.contains("${url!\"http://www.host.local\"}")
+					.contains("Danke")
+					.contains("Verwaltung");
+		}
+	}
+
+	@DisplayName("Fill template")
+	@Nested
+	class TestFillTemplate {
+
+		@Test
+		void shouldReturnFilledTemplate() {
+			var value = "http://test.url";
+			var content = handler.fillTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE,
+					Map.of(CollaborationService.KEY_TEMPLATE_URL, value));
+
+			assertThat(content)
+					.contains("Hallo Fachstelle,")
+					.contains("bitte bearbeiten:")
+					.contains(value)
+					.contains("Danke")
+					.contains("Verwaltung");
+		}
+
+		@Test
+		void shouldReturnWithDefaultValue() {
+			var content = handler.fillTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE, Collections.emptyMap());
+
+			assertThat(content)
+					.contains("Hallo Fachstelle,")
+					.contains("bitte bearbeiten:")
+					.contains("http://www.host.local")
+					.contains("Danke")
+					.contains("Verwaltung");
+		}
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationServiceKontoMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationServiceKontoMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..88d55e54875c2163ff2a17077b2d93998bdfcefa
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationServiceKontoMapperTest.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudServiceKonto;
+import de.ozgcloud.apilib.vorgang.OzgCloudServiceKontoTestFactory;
+import de.ozgcloud.apilib.vorgang.OzgCloudTrustLevel;
+import de.ozgcloud.apilib.vorgang.grpc.GrpcServiceKontoTestFactory;
+import de.ozgcloud.vorgang.common.grpc.GrpcObjectMapper;
+
+class CollaborationServiceKontoMapperTest {
+
+	private final CollaborationServiceKontoMapper mapper = Mappers.getMapper(CollaborationServiceKontoMapper.class);
+
+	private final GrpcObjectMapper grpcObjectMapper = Mappers.getMapper(GrpcObjectMapper.class);
+
+	@BeforeEach
+	void init() {
+		ReflectionTestUtils.setField(mapper, "grpcObjectMapper", grpcObjectMapper);
+	}
+
+	@Nested
+	class TestFromServiceKonto {
+
+		private static final OzgCloudServiceKonto SERVICE_KONTO = OzgCloudServiceKontoTestFactory.createBuilder()
+				.trustLevel(OzgCloudTrustLevel.from(ServiceKontoTestFactory.TRUST_LEVEL.getValue())).build();
+
+		@Test
+		void shouldMapServiceKonto() {
+			var result = mapper.fromServiceKonto(SERVICE_KONTO);
+
+			assertThat(result).usingRecursiveComparison().isEqualTo(ServiceKontoTestFactory.create());
+		}
+	}
+
+	@Nested
+	class TestToServiceKonto {
+
+		private static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create();
+
+		@Test
+		void shouldMapServiceKonto() {
+			var grpcServiceKonto = GrpcServiceKontoTestFactory.createBuilder().setTrustLevel(ServiceKontoTestFactory.TRUST_LEVEL.getValue())
+					.build();
+
+			var result = mapper.toServiceKonto(SERVICE_KONTO);
+
+			assertThat(result).usingRecursiveComparison().isEqualTo(grpcServiceKonto);
+		}
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java
index 9d9e42a9a16070bb70aa471743d3f63369e66bad..0eceb189917f3533eb22914963df9db7103e8cb8 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java
@@ -1,3 +1,26 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
 
 import static org.assertj.core.api.Assertions.*;
@@ -22,9 +45,11 @@ class CollaborationVorgangMapperTest {
 	@InjectMocks
 	private final CollaborationVorgangMapper mapper = Mappers.getMapper(CollaborationVorgangMapper.class);
 	@Mock
-	private final CollaborationEingangMapper eingangMapper = Mappers.getMapper(CollaborationEingangMapper.class);
+	private CollaborationEingangMapper eingangMapper;
 	@Mock
-	private final CollaborationRequestMapper collaborationRequestMapper = Mappers.getMapper(CollaborationRequestMapper.class);
+	private CollaborationRequestMapper collaborationRequestMapper;
+	@Mock
+	private CollaborationServiceKontoMapper serviceKontoMapper;
 
 	@DisplayName("From ozgCloudVorgang")
 	@Nested
@@ -39,6 +64,7 @@ class CollaborationVorgangMapperTest {
 		@BeforeEach
 		void mock() {
 			when(eingangMapper.fromOzgCloudEingang(any())).thenReturn(EingangTestFactory.create());
+			when(serviceKontoMapper.fromServiceKonto(any())).thenReturn(ServiceKontoTestFactory.create());
 		}
 
 		@Test
@@ -48,6 +74,13 @@ class CollaborationVorgangMapperTest {
 			verify(eingangMapper).fromOzgCloudEingang(ozgCloudEingang);
 		}
 
+		@Test
+		void shouldCallServiceKontoMapper() {
+			mapper.fromOzgCloudVorgang(ozgCloudVorgang);
+
+			verify(serviceKontoMapper).fromServiceKonto(ozgCloudVorgang.getHeader().getServiceKonto());
+		}
+
 		@Test
 		void shouldMap() {
 			var mappedVorgang = mapper.fromOzgCloudVorgang(ozgCloudVorgang);
@@ -85,7 +118,7 @@ class CollaborationVorgangMapperTest {
 		void shouldMap() {
 			var vorgang = mapper.toGrpc(VorgangTestFactory.create());
 
-			assertThat(vorgang).usingRecursiveComparison().ignoringFields("memoizedHashCode").isEqualTo(GrpcVorgangTestFactory.create());
+			assertThat(vorgang).usingRecursiveComparison().isEqualTo(GrpcVorgangTestFactory.create());
 		}
 	}
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/PostfachAddressTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/PostfachAddressTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c20d290e025239ef8a531ea9c8de43c0733abca
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/PostfachAddressTestFactory.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import java.util.Map;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudPostfachAddressIdentifierTestFactory;
+import de.ozgcloud.collaboration.vorgang.ServiceKonto.PostfachAddress;
+import de.ozgcloud.collaboration.vorgang.ServiceKonto.PostfachAddress.PostfachAddressBuilder;
+
+public class PostfachAddressTestFactory {
+
+	public static final String VERSION = "1.0";
+	public static final int TYPE = 1;
+	public static final String POSTFACH_ID = "0815";
+
+	public static PostfachAddress create() {
+		return createBuilder().build();
+	}
+
+	public static PostfachAddressBuilder createBuilder() {
+		return PostfachAddress.builder()
+				.version(VERSION)
+				.type(TYPE)
+				.identifier(Map.of(OzgCloudPostfachAddressIdentifierTestFactory.NAME, POSTFACH_ID));
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/ServiceKontoTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/ServiceKontoTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7e01059f1f4adbe6ae885320e6a798aa7537dc9
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/ServiceKontoTestFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import de.ozgcloud.collaboration.vorgang.ServiceKonto.ServiceKontoBuilder;
+
+public class ServiceKontoTestFactory {
+
+	public static final TrustLevel TRUST_LEVEL = TrustLevel.LEVEL_1;
+	public static final String TYPE = "type";
+	public static final ServiceKonto.PostfachAddress POSTFACH_ADDRESS = PostfachAddressTestFactory.create();
+
+	public static ServiceKonto create() {
+		return createBuilder().build();
+	}
+
+	public static ServiceKontoBuilder createBuilder() {
+		return ServiceKonto.builder()
+				.type(TYPE)
+				.trustLevel(TRUST_LEVEL)
+				.address(POSTFACH_ADDRESS);
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/TrustLevelTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/TrustLevelTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff9dbfae3a6f75a0f6f3c0854b950249f5d1a546
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/TrustLevelTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2024 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.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudTrustLevel;
+
+class TrustLevelTest {
+
+	@DisplayName("From string")
+	@Nested
+	class TestFromString {
+
+		@DisplayName("should return TrustLevel if value matches with existing")
+		@Test
+		void shouldReturnTrustLevel() {
+			var trustLevelValue = OzgCloudTrustLevel.from(TrustLevel.LEVEL_2.getValue());
+
+			var trustLevel = TrustLevel.from(trustLevelValue);
+
+			assertThat(trustLevel).isEqualTo(TrustLevel.LEVEL_2);
+		}
+
+		@Test
+		void shouldThrowExceptionIfValueNotMatches() {
+			var trustLevelValue = OzgCloudTrustLevel.from("quatsch");
+
+			assertThatThrownBy(() -> TrustLevel.from(trustLevelValue)).isInstanceOf(IllegalArgumentException.class);
+		}
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java
index 0dd77436474c823413748fe40134f5032e35fda0..9a5736132b24dadfe3c03a2d0a83002deafac596 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java
@@ -2,11 +2,12 @@ package de.ozgcloud.collaboration.vorgang;
 
 import java.time.ZonedDateTime;
 
-class VorgangHeaderTestFactory {
+public class VorgangHeaderTestFactory {
 
 	public final static String CREATED_AT_STR = "2023-04-01T10:00:15Z";
 	public final static ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR);
 	public final static String AKTENZEICHEN = "DE_12345_XY";
+	public final static ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create();
 
 	public static VorgangHeader create() {
 		return createBuilder().build();
@@ -15,6 +16,7 @@ class VorgangHeaderTestFactory {
 	public static VorgangHeader.VorgangHeaderBuilder createBuilder() {
 		return VorgangHeader.builder()
 				.createdAt(CREATED_AT)
-				.aktenzeichen(AKTENZEICHEN);
+				.aktenzeichen(AKTENZEICHEN)
+				.serviceKonto(SERVICE_KONTO);
 	}
 }