diff --git a/collaboration-manager-interface/pom.xml b/collaboration-manager-interface/pom.xml
index ac7f3a252577176763517db80311bbbacbefd4a3..d1324ea396b72dad7e8fa6ef6278a0b81d960578 100644
--- a/collaboration-manager-interface/pom.xml
+++ b/collaboration-manager-interface/pom.xml
@@ -50,11 +50,25 @@
 		<maven.compiler.source>${java.version}</maven.compiler.source>
 		<maven.compiler.target>${java.version}</maven.compiler.target>
 
+		<vorgang-manager.version>2.13.0-SNAPSHOT</vorgang-manager.version>
 		<find-and-replace-maven-plugin.version>1.1.0</find-and-replace-maven-plugin.version>
 		<ozgcloud.license.version>1.6.0</ozgcloud.license.version>
 	</properties>
 
 	<dependencies>
+		<!-- OZG-Cloud -->
+		<dependency>
+			<groupId>de.ozgcloud.vorgang</groupId>
+			<artifactId>vorgang-manager-interface</artifactId>
+			<version>${vorgang-manager.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.vorgang</groupId>
+			<artifactId>vorgang-manager-interface</artifactId>
+			<classifier>sources</classifier>
+			<scope>provided</scope>
+			<version>${vorgang-manager.version}</version>
+		</dependency>
 		<!-- protobuf -->
 		<dependency>
 			<groupId>com.google.protobuf</groupId>
diff --git a/collaboration-manager-interface/src/main/protobuf/.gitkeep b/collaboration-manager-interface/src/main/protobuf/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/collaboration-manager-interface/src/main/protobuf/collaboration.model.proto b/collaboration-manager-interface/src/main/protobuf/collaboration.model.proto
new file mode 100644
index 0000000000000000000000000000000000000000..8666ef1741a63fc287746088b92e9f3b211d2d1c
--- /dev/null
+++ b/collaboration-manager-interface/src/main/protobuf/collaboration.model.proto
@@ -0,0 +1,123 @@
+/*
+ * 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.collaboration;
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.collaboration";
+option java_outer_classname = "CollaborationModelProto";
+
+message GrpcFindVorgangRequest {
+	string vorgangId = 1;
+	string samlToken = 2;
+}
+
+message GrpcFindVorgangResponse {
+	GrpcVorgang vorgang = 1;
+}
+
+message GrpcVorgang {
+	string id = 1;
+	int64 version = 2;
+	string vorgangName = 3;
+	string vorgangNummer = 4;
+	
+	GrpcVorgangHeader header = 5;
+	GrpcEingang eingang = 6;
+	GrpcCollaborationRequest collaborationRequest = 7;
+}
+
+message GrpcVorgangHeader {
+	string createdAt = 1;
+	string aktenzeichen = 2;
+}
+
+message GrpcCollaborationRequest {
+	string title = 1;
+	string text = 2;
+}
+
+message GrpcEingang {
+	GrpcAntragsteller antragsteller = 1;
+
+	GrpcFormData formData = 2;
+
+	repeated GrpcFileGroup attachments = 3;
+	repeated GrpcFile representations = 4;
+}
+
+message GrpcFileGroup {
+	string name = 1;
+	repeated GrpcFile files = 2;
+}
+
+message GrpcFile {
+	string id = 1;
+	string vendorId = 2;
+	string name = 3;
+	string contentType = 4;
+	int64 size = 5;
+}
+
+message GrpcAntragsteller {
+	string firmaName = 1;
+	string anrede = 2;
+	string nachname = 3;
+	string vorname = 4;
+	string geburtsdatum = 5;
+	string geburtsort = 7;
+	string geburtsname = 8;
+	string email = 9;
+	string telefon = 10;
+	string strasse = 11;
+	string hausnummer = 12;
+	string plz = 13;
+	string ort = 14;
+
+	GrpcFormData otherData = 15;
+}
+
+message GrpcFormData {
+	repeated GrpcSubFormData formData = 1;
+}
+
+message GrpcSubForm {
+	string name = 1;
+	string label = 2;
+	repeated GrpcSubFormData formData = 3;
+}
+
+message GrpcSubFormData {
+	oneof data {
+		GrpcFormField field = 1;
+		GrpcSubForm form = 2;
+	}
+}
+
+message GrpcFormField {
+	string name = 1;
+	string label = 2;
+	string value = 3;
+}
\ No newline at end of file
diff --git a/collaboration-manager-interface/src/main/protobuf/collaboration.proto b/collaboration-manager-interface/src/main/protobuf/collaboration.proto
new file mode 100644
index 0000000000000000000000000000000000000000..33cf53ed2f4e93a8cc2169a15350fcc054b2d442
--- /dev/null
+++ b/collaboration-manager-interface/src/main/protobuf/collaboration.proto
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.collaboration;
+
+import "collaboration.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.collaboration";
+option java_outer_classname = "CollaborationProto";
+
+service CollaborationService {
+
+	rpc FindVorgang(GrpcFindVorgangRequest) returns (GrpcFindVorgangResponse) {
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/pom.xml b/collaboration-manager-server/pom.xml
index 584d8c363192c9ce2b2cfd0013585c24b36cabbb..95b93e5c01d236014f5d03d4c42d0dd14cd1f219 100644
--- a/collaboration-manager-server/pom.xml
+++ b/collaboration-manager-server/pom.xml
@@ -40,8 +40,8 @@
 	<name>OZG-Cloud Collaboration Manager Server</name>
 
 	<properties>
-		<vorgang-manager.version>2.12.0-SNAPSHOT</vorgang-manager.version>
-		<api-lib.version>0.11.0</api-lib.version>
+		<vorgang-manager.version>2.13.0-SNAPSHOT</vorgang-manager.version>
+		<api-lib.version>0.12.0-SNAPSHOT</api-lib.version>
 	</properties>
 
 	<dependencies>
@@ -51,6 +51,11 @@
 			<artifactId>command-manager</artifactId>
 			<version>${vorgang-manager.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.collaboration</groupId>
+			<artifactId>collaboration-manager-interface</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 		<dependency>
 			<groupId>de.ozgcloud.vorgang</groupId>
 			<artifactId>vorgang-manager-interface</artifactId>
@@ -72,6 +77,12 @@
 			<artifactId>spring-boot-starter-validation</artifactId>
 		</dependency>
 
+		<!-- gRPC -->
+		<dependency>
+			<groupId>net.devh</groupId>
+			<artifactId>grpc-server-spring-boot-starter</artifactId>
+		</dependency>
+
 		<!--TEST-->
 		<dependency>
 			<groupId>de.ozgcloud.command</groupId>
@@ -80,6 +91,14 @@
 			<type>test-jar</type>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>de.ozgcloud.api-lib</groupId>
+			<artifactId>api-lib-core</artifactId>
+			<version>${api-lib.version}</version>
+			<type>test-jar</type>
+			<scope>test</scope>
+		</dependency>
+		
 	</dependencies>
 
 	<build>
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationGrpcService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationGrpcService.java
new file mode 100644
index 0000000000000000000000000000000000000000..17d5c1c2bda129376973019c196c08d8673f37e1
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationGrpcService.java
@@ -0,0 +1,53 @@
+/*
+ * 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;
+
+import de.ozgcloud.collaboration.vorgang.CollaborationVorgangMapper;
+import de.ozgcloud.collaboration.vorgang.Vorgang;
+import de.ozgcloud.collaboration.vorgang.VorgangService;
+import io.grpc.stub.StreamObserver;
+import lombok.RequiredArgsConstructor;
+import net.devh.boot.grpc.server.service.GrpcService;
+
+@GrpcService
+@RequiredArgsConstructor
+public class CollaborationGrpcService extends CollaborationServiceGrpc.CollaborationServiceImplBase {
+
+	private final VorgangService vorgangService;
+
+	private final CollaborationVorgangMapper vorgangMapper;
+
+	@Override
+	public void findVorgang(GrpcFindVorgangRequest request, StreamObserver<GrpcFindVorgangResponse> responseObserver) {
+		var vorgang = vorgangService.getVorgang(request.getVorgangId());
+		responseObserver.onNext(buildFindVorgangResponse(vorgang));
+		responseObserver.onCompleted();
+	}
+
+	GrpcFindVorgangResponse buildFindVorgangResponse(Vorgang vorgang) {
+		return GrpcFindVorgangResponse.newBuilder()
+				.setVorgang(vorgangMapper.toGrpc(vorgang))
+				.build();
+	}
+}
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 d0642a3122c2ff95c2d8740366244285df18fd63..185050d2ae638a872e76f3ee3eef90ab57cad293 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
@@ -41,15 +41,19 @@ public class CollaborationManagerConfiguration {
 	public static final String USER_PROFILE_SERVICE_NAME = "collaboration_UserProfileService";
 	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 CALL_CONTEXT_INTERCEPTOR_NAME = "collaboration_CallContextInterceptor";
 	public static final String CALL_CONTEXT_PROVIDER_NAME = "collaboration_CallContextProvider";
-	public static final String COLLABORATION_SERVICE_NAME = "collaboration_CollaborationService";
 
-	@GrpcClient("command-manager")
+	public static final String GRPC_VORGANG_MANAGER_NAME = "vorgang-manager";
+	public static final String GRPC_COMMAND_MANAGER_NAME = "command-manager";
+
+	@GrpcClient(CollaborationManagerConfiguration.GRPC_COMMAND_MANAGER_NAME)
 	private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub;
 
 	@Bean(COMMAND_SERVICE_NAME)
-		// NOSONAR
+	// NOSONAR
 	OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, CollaborationManagerCallContextProvider contextProvider) {
 		return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider,
 				GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS);
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java
index ca193191a030df2af925f3d763f1409157a3bd68..9e9a1b2ba8e19a306b6a5870392ce4ebe354d1ac 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/common/user/CollaborationUserProfileMapper.java
@@ -24,11 +24,12 @@
 package de.ozgcloud.collaboration.common.user;
 
 import org.mapstruct.Mapper;
+import org.mapstruct.ReportingPolicy;
 
 import de.ozgcloud.apilib.user.OzgCloudUserId;
 import de.ozgcloud.apilib.user.OzgCloudUserProfile;
 
-@Mapper
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
 public interface CollaborationUserProfileMapper {
 
 	UserProfile mapProfile(OzgCloudUserProfile userProfile);
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Antragsteller.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Antragsteller.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e95b450b7d9a5412d79c5dc9eaca5fa83534eac
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Antragsteller.java
@@ -0,0 +1,29 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+class Antragsteller {
+
+	private String firmaName;
+	private String anrede;
+	private String vorname;
+	private String nachname;
+
+	private String geburtsdatum;
+	private String geburtsort;
+	private String geburtsname;
+	private String strasse;
+	private String hausnummer;
+	private String plz;
+	private String ort;
+
+	private String email;
+	private String telefon;
+
+	private List<FormDataEntry> otherData;
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..240c45626be091dbabc7b4c6297dd130f7258d46
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapper.java
@@ -0,0 +1,36 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller;
+import de.ozgcloud.collaboration.GrpcAntragsteller;
+
+@Mapper(uses = { CollaborationFormDataMapper.class }, unmappedTargetPolicy = ReportingPolicy.WARN)
+interface CollaborationAntragstellerMapper {
+
+	Antragsteller fromOzgCloudAntragsteller(OzgCloudAntragsteller antragsteller);
+
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeOtherData", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "anredeBytes", ignore = true)
+	@Mapping(target = "emailBytes", ignore = true)
+	@Mapping(target = "firmaNameBytes", ignore = true)
+	@Mapping(target = "geburtsdatumBytes", ignore = true)
+	@Mapping(target = "geburtsnameBytes", ignore = true)
+	@Mapping(target = "geburtsortBytes", ignore = true)
+	@Mapping(target = "hausnummerBytes", ignore = true)
+	@Mapping(target = "nachnameBytes", ignore = true)
+	@Mapping(target = "ortBytes", ignore = true)
+	@Mapping(target = "plzBytes", ignore = true)
+	@Mapping(target = "strasseBytes", ignore = true)
+	@Mapping(target = "telefonBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "vornameBytes", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	GrpcAntragsteller toGrpc(Antragsteller antragsteller);
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..91c75be4d91c6e8d415797b993823ed122568eb5
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapper.java
@@ -0,0 +1,44 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import org.mapstruct.CollectionMappingStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.NullValueMappingStrategy;
+import org.mapstruct.NullValuePropertyMappingStrategy;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudEingang;
+import de.ozgcloud.collaboration.GrpcEingang;
+
+@Mapper(uses = { CollaborationAntragstellerMapper.class, CollaborationFileGroupMapper.class, CollaborationFileMapper.class,
+		CollaborationFormDataMapper.class }, //
+		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, ////
+		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_NULL, //
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, //
+		nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT)
+interface CollaborationEingangMapper {
+
+	@Mapping(target = "attachment", ignore = true)
+	@Mapping(target = "representation", ignore = true)
+	@Mapping(target = "formDataEntrys", source = "formDataEntrys")
+	abstract Eingang fromOzgCloudEingang(OzgCloudEingang eingang);
+
+	@Mapping(target = "formData", source = "formDataEntrys")
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeAntragsteller", ignore = true)
+	@Mapping(target = "mergeFormData", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "removeAttachments", ignore = true)
+	@Mapping(target = "removeRepresentations", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	@Mapping(target = "attachmentsBuilderList", ignore = true)
+	@Mapping(target = "attachmentsList", source = "attachments")
+	@Mapping(target = "attachmentsOrBuilderList", ignore = true)
+	@Mapping(target = "representationsBuilderList", ignore = true)
+	@Mapping(target = "representationsList", source = "representations")
+	@Mapping(target = "representationsOrBuilderList", ignore = true)
+	abstract GrpcEingang toGrpc(Eingang eingang);
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..9972b78637be35fcce2be2dfaddf3cab58740664
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapper.java
@@ -0,0 +1,33 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import org.mapstruct.CollectionMappingStrategy;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.NullValueCheckStrategy;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.apilib.file.OzgCloudFileGroup;
+import de.ozgcloud.collaboration.GrpcFileGroup;
+
+@Mapper(uses = { CollaborationFileMapper.class }, //
+		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //
+		unmappedTargetPolicy = ReportingPolicy.WARN, //
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+interface CollaborationFileGroupMapper {
+
+	@Mapping(target = "file", ignore = true)
+	FileGroup fromOzgCloudFileGroup(OzgCloudFileGroup fileGroup);
+
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "removeFiles", ignore = true)
+	@Mapping(target = "nameBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	@Mapping(target = "filesBuilderList", ignore = true)
+	@Mapping(target = "filesList", source = "files")
+	@Mapping(target = "filesOrBuilderList", ignore = true)
+	GrpcFileGroup toGrpc(FileGroup fileGroup);
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..36cdce6b0cb6ba24408a342a93813097cb725a9d
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapper.java
@@ -0,0 +1,32 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.apilib.file.OzgCloudFile;
+import de.ozgcloud.apilib.file.OzgCloudFileId;
+import de.ozgcloud.collaboration.GrpcFile;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
+interface CollaborationFileMapper {
+
+	File fromOzgCloudFile(OzgCloudFile file);
+
+	@Mapping(target = "contentTypeBytes", ignore = true)
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "idBytes", ignore = true)
+	@Mapping(target = "nameBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "vendorId", ignore = true)
+	@Mapping(target = "vendorIdBytes", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	GrpcFile toGrpc(File file);
+
+	default String toString(OzgCloudFileId id) {
+		return id.toString();
+	}
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..e63edd30a7fffef520f6de78cf31397c00fefcd6
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapper.java
@@ -0,0 +1,122 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Named;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry;
+import de.ozgcloud.apilib.vorgang.OzgCloudFormField;
+import de.ozgcloud.apilib.vorgang.OzgCloudSubForm;
+import de.ozgcloud.collaboration.GrpcFormData;
+import de.ozgcloud.collaboration.GrpcFormField;
+import de.ozgcloud.collaboration.GrpcSubForm;
+import de.ozgcloud.collaboration.GrpcSubFormData;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
+public interface CollaborationFormDataMapper {
+
+	default List<FormDataEntry> fromOzgCloudEntries(List<OzgCloudFormDataEntry> entries) {
+		return Stream.concat(fromOzgCloudFormFields(entries), fromOzgCloudSubForms(entries)).toList();
+	}
+
+	default Stream<FormDataEntry> fromOzgCloudFormFields(List<OzgCloudFormDataEntry> entries) {
+		return entries.stream()
+				.filter(OzgCloudFormDataEntry::isFormEntry)
+				.map(OzgCloudFormField.class::cast)
+				.map(this::fromOzgCloudFormField);
+	}
+
+	default Stream<FormDataEntry> fromOzgCloudSubForms(List<OzgCloudFormDataEntry> entries) {
+		return entries.stream()
+				.filter(OzgCloudFormDataEntry::isSubForm)
+				.map(OzgCloudSubForm.class::cast)
+				.map(this::fromOzgCloudSubForm);
+	}
+
+	default FormDataEntry fromOzgCloudSubForm(OzgCloudSubForm subForm) {
+		var subForms = subForm.getFormEntrys().stream()
+				.filter(OzgCloudFormDataEntry::isSubForm)
+				.map(OzgCloudSubForm.class::cast)
+				.map(this::fromOzgCloudSubForm);
+
+		var formFields = subForm.getFormEntrys().stream()
+				.filter(OzgCloudFormDataEntry::isFormEntry)
+				.map(OzgCloudFormField.class::cast)
+				.map(this::fromOzgCloudFormField);
+
+		return SubForm.builder()
+				.label(subForm.getLabel())
+				.name(subForm.getName())
+				.formEntrys(Stream.concat(subForms, formFields).toList())
+				.build();
+	}
+
+	FormField fromOzgCloudFormField(OzgCloudFormField formField);
+
+	default GrpcFormData toGrpcFormData(List<FormDataEntry> entries) {
+		return GrpcFormData.newBuilder()
+				.addAllFormData(Stream.concat(fromFormField(entries), fromSubForm(entries)).toList())
+				.build();
+	}
+
+	default Stream<GrpcSubFormData> fromFormField(List<FormDataEntry> entry) {
+		return entry.stream()
+				.filter(FormDataEntry::isFormEntry)
+				.map(FormField.class::cast)
+				.map(this::toGrpcFormField)
+				.map(formField -> GrpcSubFormData.newBuilder().setField(formField).build());
+	}
+
+	default Stream<GrpcSubFormData> fromSubForm(List<FormDataEntry> entry) {
+		return entry.stream()
+				.filter(FormDataEntry::isSubForm)
+				.map(SubForm.class::cast)
+				.map(this::toGrpcSubForm)
+				.map(subForm -> GrpcSubFormData.newBuilder().setForm(subForm).build());
+	}
+
+	@Mapping(target = "value", qualifiedByName = "mapValue", source = "value")
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "labelBytes", ignore = true)
+	@Mapping(target = "nameBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "valueBytes", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	GrpcFormField toGrpcFormField(FormField formField);
+
+	@Named("mapValue")
+	default String toString(Object object) {
+		return String.valueOf(object);
+	}
+
+	default GrpcSubForm toGrpcSubForm(SubForm subForm) {
+		var subForms = subForm.getFormEntrys().stream()
+				.filter(FormDataEntry::isSubForm)
+				.map(SubForm.class::cast)
+				.map(this::toGrpcSubForm)
+				.map(entry -> GrpcSubFormData.newBuilder()
+						.setForm(entry)
+						.build());
+
+		var formFields = subForm.getFormEntrys().stream()
+				.filter(FormDataEntry::isFormEntry)
+				.map(FormField.class::cast)
+				.map(this::toGrpcFormField)
+				.map(entry -> GrpcSubFormData.newBuilder()
+						.setField(entry)
+						.build());
+
+		return GrpcSubForm.newBuilder()
+				.setLabel(subForm.getLabel())
+				.setName(subForm.getName())
+				.addAllFormData(Stream.concat(subForms, formFields).toList())
+				.build();
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequest.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequest.java
new file mode 100644
index 0000000000000000000000000000000000000000..60b26ebb254225e52af8e4ebb324031d2960400c
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequest.java
@@ -0,0 +1,14 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.ToString;
+
+@ToString
+@Getter
+@Builder
+class CollaborationRequest {
+
+	private String title;
+	private String text;
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestMapper.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..406e74dafc9412141b175a4371dd8d3925ce82a9
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestMapper.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.ReportingPolicy;
+
+import de.ozgcloud.collaboration.GrpcCollaborationRequest;
+
+@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
+interface CollaborationRequestMapper {
+
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "textBytes", ignore = true)
+	@Mapping(target = "titleBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	GrpcCollaborationRequest toGrpc(CollaborationRequest request);
+}
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..831d1b8d30c4be1d00e17a872cefcd6df2631299
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapper.java
@@ -0,0 +1,54 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+import org.apache.commons.collections.CollectionUtils;
+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.OzgCloudVorgang;
+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 }, //
+		unmappedTargetPolicy = ReportingPolicy.WARN, //
+		collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, //
+		nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, //
+		nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
+public interface CollaborationVorgangMapper {
+
+	@Mapping(target = "collaborationRequest", ignore = true)
+	@Mapping(target = "eingang", ignore = true)
+	Vorgang fromOzgCloudVorgang(OzgCloudVorgang vorgang);
+
+	@Mapping(target = "eingang", source = "eingangs")
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeCollaborationRequest", ignore = true)
+	@Mapping(target = "mergeEingang", ignore = true)
+	@Mapping(target = "mergeHeader", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "idBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "vorgangNameBytes", ignore = true)
+	@Mapping(target = "vorgangNummerBytes", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	GrpcVorgang toGrpc(Vorgang vorgang);
+
+	default String toString(OzgCloudVorgangId id) {
+		return id.toString();
+	}
+
+	default Eingang mapListToGrpcEingang(List<Eingang> eingaenge) {
+		if (CollectionUtils.isEmpty(eingaenge)) {
+			return null;
+		}
+		return eingaenge.get(0);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Eingang.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Eingang.java
new file mode 100644
index 0000000000000000000000000000000000000000..114f7bfd8de4f0340d9170494470cfb7ce0d8dba
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Eingang.java
@@ -0,0 +1,24 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+import lombok.ToString;
+
+@ToString
+@Getter
+@Builder
+class Eingang {
+
+	@Builder.Default
+	private Antragsteller antragsteller = Antragsteller.builder().build();
+
+	private List<FormDataEntry> formDataEntrys;
+
+	@Singular
+	private List<FileGroup> attachments;
+	@Singular
+	private List<File> representations;
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/File.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/File.java
new file mode 100644
index 0000000000000000000000000000000000000000..3bf251ca627875fd7270b1b2b2c2d8c2a7e7685c
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/File.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import de.ozgcloud.apilib.file.OzgCloudFileId;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.ToString;
+
+@Builder
+@Getter
+@ToString
+class File {
+
+	private OzgCloudFileId id;
+
+	private String name;
+	private String contentType;
+	private long size;
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FileGroup.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FileGroup.java
new file mode 100644
index 0000000000000000000000000000000000000000..f53808b9cced82e5a2183f0fd9ae77d0e2268b40
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FileGroup.java
@@ -0,0 +1,19 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+import lombok.ToString;
+
+@Builder
+@Getter
+@ToString
+class FileGroup {
+
+	private String name;
+
+	@Singular
+	private List<File> files;
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormDataEntry.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormDataEntry.java
new file mode 100644
index 0000000000000000000000000000000000000000..1253cb3391b2a7ae66361e5771c5759ea122e531
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormDataEntry.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.collaboration.vorgang;
+
+interface FormDataEntry {
+
+	String getName();
+
+	String getLabel();
+
+	default boolean isSubForm() {
+		return false;
+	}
+
+	default boolean isFormEntry() {
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormField.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormField.java
new file mode 100644
index 0000000000000000000000000000000000000000..fdf85ecbce92c2e4e03a92d2cb1ed57d65ca84b2
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/FormField.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.ToString;
+
+@ToString
+@Getter
+@Builder
+class FormField implements FormDataEntry {
+
+	private String name;
+	private String label;
+
+	private Object value;
+
+	@Override
+	public boolean isFormEntry() {
+		return true;
+	}
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/SubForm.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/SubForm.java
new file mode 100644
index 0000000000000000000000000000000000000000..a2c43fddc7d174e742da1776fa3dd2fa8e61fa63
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/SubForm.java
@@ -0,0 +1,22 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+
+@Getter
+@Builder
+class SubForm implements FormDataEntry {
+
+	private String name;
+	private String label;
+	@Singular
+	private List<FormDataEntry> formEntrys;
+
+	@Override
+	public boolean isSubForm() {
+		return true;
+	}
+}
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Vorgang.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Vorgang.java
new file mode 100644
index 0000000000000000000000000000000000000000..faa23784fb539208ef4e2346c93a7e872bd80250
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/Vorgang.java
@@ -0,0 +1,29 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Singular;
+import lombok.ToString;
+
+@ToString
+@Getter
+@Builder
+public class Vorgang {
+
+	private OzgCloudVorgangId id;
+	private long version;
+	private String vorgangName;
+	private String vorgangNummer;
+
+	@ToString.Include
+	private VorgangHeader header;
+
+	@Singular
+	private List<Eingang> eingangs;
+
+	@ToString.Include
+	private CollaborationRequest collaborationRequest;
+}
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..095e30a09012434d478ab2ab51ed6932b7fbf7ec
--- /dev/null
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangHeader.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.time.ZonedDateTime;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.ToString;
+
+@ToString
+@Getter
+@Builder
+class VorgangHeader {
+
+	private ZonedDateTime createdAt;
+	private String aktenzeichen;
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java
index 971117179d3c08e6285c7a852dd571439324e05e..a4e0595e004ff5e5fd936249fdc15a88fa4cc852 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteService.java
@@ -27,6 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
 import de.ozgcloud.collaboration.CollaborationCallContextAttachingInterceptor;
 import de.ozgcloud.collaboration.CollaborationManagerCollaborationRequestMapper;
 import de.ozgcloud.collaboration.CollaborationManagerConfiguration;
@@ -38,12 +40,17 @@ import net.devh.boot.grpc.client.inject.GrpcClient;
 @Service(CollaborationManagerConfiguration.VORGANG_REMOTE_SERVICE_NAME)
 class VorgangRemoteService {
 
-	@GrpcClient("vorgang-manager")
+	@GrpcClient(CollaborationManagerConfiguration.GRPC_VORGANG_MANAGER_NAME)
 	private VorgangServiceBlockingStub vorgangServiceBlockingStub;
 
+	@Autowired
+	private OzgCloudVorgangService ozgCloudVorgangService;
 	@Autowired
 	private CollaborationManagerCollaborationRequestMapper collaborationRequestMapper;
 
+	@Autowired
+	private CollaborationVorgangMapper mapper;
+
 	@Autowired
 	@Qualifier(CollaborationManagerConfiguration.CALL_CONTEXT_INTERCEPTOR_NAME)
 	private CollaborationCallContextAttachingInterceptor callContextInterceptor;
@@ -61,4 +68,8 @@ class VorgangRemoteService {
 	VorgangServiceBlockingStub getServiceStub() {
 		return vorgangServiceBlockingStub.withInterceptors(callContextInterceptor);
 	}
+
+	public Vorgang getVorgang(OzgCloudVorgangId vorgangId) {
+		return mapper.fromOzgCloudVorgang(ozgCloudVorgangService.getById(vorgangId));
+	}
 }
diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java
index 4aba21249268fda3f642316267f8414563a8d2f0..4370a27c25911760d85f1281969c6d613883ca3f 100644
--- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java
+++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/vorgang/VorgangService.java
@@ -26,6 +26,7 @@ package de.ozgcloud.collaboration.vorgang;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
 import de.ozgcloud.collaboration.CollaborationManagerConfiguration;
 import de.ozgcloud.collaboration.CollaborationRequest;
 import lombok.RequiredArgsConstructor;
@@ -40,4 +41,8 @@ public class VorgangService {
 	public String createCollaborationVorgang(CollaborationRequest request) {
 		return vorgangRemoteService.createCollaborationVorgang(request);
 	}
+
+	public Vorgang getVorgang(String vorgangId) {
+		return vorgangRemoteService.getVorgang(OzgCloudVorgangId.from(vorgangId));
+	}
 }
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationGrpcServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationGrpcServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..b95b5e952486d72dfd99a17ac67f60b37ed76a45
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationGrpcServiceTest.java
@@ -0,0 +1,134 @@
+/*
+ * 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;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+
+import de.ozgcloud.collaboration.vorgang.CollaborationVorgangMapper;
+import de.ozgcloud.collaboration.vorgang.GrpcVorgangTestFactory;
+import de.ozgcloud.collaboration.vorgang.Vorgang;
+import de.ozgcloud.collaboration.vorgang.VorgangService;
+import de.ozgcloud.collaboration.vorgang.VorgangTestFactory;
+import de.ozgcloud.command.CommandTestFactory;
+import io.grpc.stub.StreamObserver;
+
+class CollaborationGrpcServiceTest {
+
+	@Spy
+	@InjectMocks
+	private CollaborationGrpcService grpcService;
+
+	@Mock
+	private VorgangService vorgangService;
+	@Mock
+	private CollaborationVorgangMapper vorgangMapper;
+
+	@Nested
+	class TestFindVorgang {
+
+		private static final Vorgang VORGANG = VorgangTestFactory.create();
+
+		@Mock
+		private GrpcFindVorgangResponse grpcResponse;
+		@Mock
+		private StreamObserver<GrpcFindVorgangResponse> responseObserver;
+
+		@BeforeEach
+		void init() {
+			doReturn(grpcResponse).when(grpcService).buildFindVorgangResponse(any());
+			when(vorgangService.getVorgang(anyString())).thenReturn(VORGANG);
+		}
+
+		@Test
+		void shouldCallGetVorgang() {
+			findVorgang();
+
+			verify(vorgangService).getVorgang(CommandTestFactory.VORGANG_ID);
+		}
+
+		@Test
+		void shouldCallBuildFindVorgangResponse() {
+			findVorgang();
+
+			verify(grpcService).buildFindVorgangResponse(VORGANG);
+		}
+
+		@Test
+		void shouldCallOnNext() {
+			findVorgang();
+
+			verify(responseObserver).onNext(grpcResponse);
+		}
+
+		@Test
+		void shouldCallOnCompleted() {
+			findVorgang();
+
+			verify(responseObserver).onCompleted();
+		}
+
+		private void findVorgang() {
+			grpcService.findVorgang(GrpcFindVorgangRequestTestFactory.create(), responseObserver);
+		}
+	}
+
+	@Nested
+	class TestBuildFindVorgangResponse {
+
+		private final Vorgang vorgang = VorgangTestFactory.create();
+		private final GrpcVorgang grpcVorgang = GrpcVorgangTestFactory.create();
+
+		@BeforeEach
+		void init() {
+			when(vorgangMapper.toGrpc(any())).thenReturn(GrpcVorgangTestFactory.create());
+		}
+
+		@Test
+		void shouldCallMapper() {
+			buildFindVorgangResponse();
+
+			verify(vorgangMapper).toGrpc(vorgang);
+		}
+
+		@Test
+		void shouldSetVorgang() {
+			var response = buildFindVorgangResponse();
+
+			assertThat(response.getVorgang()).isEqualTo(grpcVorgang);
+		}
+
+		private GrpcFindVorgangResponse buildFindVorgangResponse() {
+			return grpcService.buildFindVorgangResponse(vorgang);
+		}
+	}
+}
\ 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 4445040555364d7f3a65eb6f800654071eb32245..9bf930073cd946f9f074a695515798666b7153f9 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
@@ -27,16 +27,32 @@ import java.util.TimeZone;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.security.authentication.AuthenticationTrustResolver;
 import org.springframework.security.authentication.AuthenticationTrustResolverImpl;
 
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapperImpl;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
+import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService;
+import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangMapper;
+import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangStubMapper;
+import de.ozgcloud.collaboration.common.callcontext.CollaborationManagerCallContextProvider;
+import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc;
 
 @SpringBootApplication(scanBasePackages = { "de.ozgcloud" })
 public class CollaborationTestApplication {
 
+	@MockBean
+	private VorgangServiceGrpc.VorgangServiceBlockingStub vorgangServiceStub;
+	@MockBean
+	private OzgCloudVorgangStubMapper vorgangStubMapper;
+	@MockBean
+	private OzgCloudVorgangMapper vorgangMapper;
+	@MockBean
+	private CollaborationManagerCallContextProvider contextProvider;
+
 	public static void main(String[] args) {
 		TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
 		SpringApplication.run(CollaborationTestApplication.class, args);
@@ -51,4 +67,9 @@ public class CollaborationTestApplication {
 	CommandMapper commandMapper() {
 		return new CommandMapperImpl();
 	}
+
+	@Bean
+	OzgCloudVorgangService ozgCloudVorgangService() {
+		return new GrpcOzgCloudVorgangService(vorgangServiceStub, vorgangMapper, vorgangStubMapper, contextProvider);
+	}
 }
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/GrpcFindVorgangRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/GrpcFindVorgangRequestTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..71691106fcdb303f57754f3e319511c0ee6bdeb0
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/GrpcFindVorgangRequestTestFactory.java
@@ -0,0 +1,41 @@
+/*
+ * 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;
+
+import de.ozgcloud.command.CommandTestFactory;
+
+public class GrpcFindVorgangRequestTestFactory {
+
+	public static final String SAML_TOKEN = "token";
+
+	public static GrpcFindVorgangRequest create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcFindVorgangRequest.Builder createBuilder() {
+		return GrpcFindVorgangRequest.newBuilder()
+				.setVorgangId(CommandTestFactory.VORGANG_ID)
+				.setSamlToken(SAML_TOKEN);
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/AntragstellerTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/AntragstellerTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d0cf52a4ef1efca33b08c731d9f39a55af0768a
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/AntragstellerTestFactory.java
@@ -0,0 +1,47 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+public class AntragstellerTestFactory {
+
+	public static final String ANREDE = "Mr.";
+
+	public static final String FIRSTNAME = "Theo";
+	public static final String NACHNAME = "Test";
+	public static final String GEBURTSDATUM = "10.04.1995";
+	public static final String GEBURTSORT = "Downtown";
+	public static final String GEBURTSNAME = "Toast";
+	public static final String STRASSE = "Treestreet";
+	public static final String HAUSNUMMER = "5a";
+	public static final String PLZ = "12345";
+	public static final String ORT = "City";
+	public static final String E_MAIL = "test@local";
+	public static final String TELEFON = "0123 2354 546";
+	public static final String FIRMA_NAME = "TestFirma";
+
+	public static final List<FormDataEntry> OTHER_DATA = List.of(
+			FormDataEntryTestFactory.createFormField(),
+			FormDataEntryTestFactory.createSubForm());
+
+	public static Antragsteller create() {
+		return createBuilder().build();
+	}
+
+	public static Antragsteller.AntragstellerBuilder createBuilder() {
+		return Antragsteller.builder()
+				.anrede(ANREDE)
+				.vorname(FIRSTNAME)
+				.nachname(NACHNAME)
+				.firmaName(FIRMA_NAME)
+				.geburtsdatum(GEBURTSDATUM)
+				.geburtsort(GEBURTSORT)
+				.geburtsname(GEBURTSNAME)
+				.strasse(STRASSE)
+				.hausnummer(HAUSNUMMER)
+				.plz(PLZ)
+				.ort(ORT)
+				.email(E_MAIL)
+				.telefon(TELEFON)
+				.otherData(OTHER_DATA);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f44a646fc44a62f2a7b4cb596d67d3aac4e055e7
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationAntragstellerMapperTest.java
@@ -0,0 +1,82 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+
+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.mapstruct.factory.Mappers;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller;
+import de.ozgcloud.apilib.vorgang.OzgCloudAntragstellerTestFactory;
+import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry;
+
+class CollaborationAntragstellerMapperTest {
+
+	@InjectMocks
+	private CollaborationAntragstellerMapper mapper = Mappers.getMapper(CollaborationAntragstellerMapper.class);
+	@Mock
+	private CollaborationFormDataMapper formDataMapper = Mappers.getMapper(CollaborationFormDataMapper.class);
+
+	@DisplayName("From ozgCloudAntragsteller")
+	@Nested
+	class TestFromOzgCloudAntragsteller {
+
+		private List<FormDataEntry> otherData = List.of(FormDataEntryTestFactory.createFormField(), FormDataEntryTestFactory.createSubForm());
+		private List<OzgCloudFormDataEntry> ozgCloudFormDataEntries = OzgCloudAntragstellerTestFactory.createOtherData();
+		private OzgCloudAntragsteller ozgCloudAntragsteller = OzgCloudAntragstellerTestFactory.createBuilder().otherData(ozgCloudFormDataEntries)
+				.build();
+
+		@BeforeEach()
+		void mock() {
+			when(formDataMapper.fromOzgCloudEntries(any())).thenReturn(otherData);
+		}
+
+		@Test
+		void shouldCallFormDataEntryMapper() {
+			mapper.fromOzgCloudAntragsteller(ozgCloudAntragsteller);
+
+			verify(formDataMapper).fromOzgCloudEntries(ozgCloudFormDataEntries);
+		}
+
+		@Test
+		void shouldMap() {
+			var mappedAntragsteller = mapper.fromOzgCloudAntragsteller(ozgCloudAntragsteller);
+
+			assertThat(mappedAntragsteller).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create());
+		}
+	}
+
+	@DisplayName("To grpc")
+	@Nested
+	class TestToGrpc {
+
+		@BeforeEach()
+		void mock() {
+			when(formDataMapper.toGrpcFormData(any())).thenReturn(GrpcFormDataTestFactory.create());
+		}
+
+		@Test
+		void shouldCallFormDataEntryMapper() {
+			mapper.toGrpc(AntragstellerTestFactory.create());
+
+			verify(formDataMapper).toGrpcFormData(AntragstellerTestFactory.OTHER_DATA);
+		}
+
+		@Test
+		void shouldMapToGrpc() {
+			var mappedAntragsteller = mapper.toGrpc(AntragstellerTestFactory.create());
+
+			assertThat(mappedAntragsteller).usingRecursiveComparison().ignoringFields("memoizedHashCode")
+					.isEqualTo(GrpcAntragstellerTestFactory.create());
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d8dc15a15d7ebc2c658e3f39d66f8717ba4ab8b
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationEingangMapperTest.java
@@ -0,0 +1,153 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+
+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.mapstruct.factory.Mappers;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import de.ozgcloud.apilib.file.OzgCloudFile;
+import de.ozgcloud.apilib.file.OzgCloudFileGroup;
+import de.ozgcloud.apilib.file.OzgCloudFileTestFactory;
+import de.ozgcloud.apilib.vorgang.OzgCloudAntragsteller;
+import de.ozgcloud.apilib.vorgang.OzgCloudAntragstellerTestFactory;
+import de.ozgcloud.apilib.vorgang.OzgCloudEingang;
+import de.ozgcloud.apilib.vorgang.OzgCloudFormField;
+import de.ozgcloud.apilib.vorgang.OzgCloudSubForm;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangEingangTestFactory;
+import de.ozgcloud.apilib.vorgang.grpc.OzgCloudFileGroupTestFactory;
+
+class CollaborationEingangMapperTest {
+
+	@InjectMocks
+	private final CollaborationEingangMapper mapper = Mappers.getMapper(CollaborationEingangMapper.class);
+	@Mock
+	private final CollaborationAntragstellerMapper antragstellerMapper = Mappers.getMapper(CollaborationAntragstellerMapper.class);
+	@Mock
+	private final CollaborationFileGroupMapper fileGroupMapper = Mappers.getMapper(CollaborationFileGroupMapper.class);
+	@Mock
+	private final CollaborationFileMapper fileMapper = Mappers.getMapper(CollaborationFileMapper.class);
+	@Mock
+	private final CollaborationFormDataMapper formDataMapper = Mappers.getMapper(CollaborationFormDataMapper.class);
+
+	@DisplayName("From ozgCloudEingang")
+	@Nested
+	class TestFromOzgCloudEingang {
+
+		private final OzgCloudAntragsteller ozgCloudAntragsteller = OzgCloudAntragstellerTestFactory.create();
+		private final OzgCloudFile ozgCloudFile = OzgCloudFileTestFactory.create();
+		private final OzgCloudFileGroup ozgCloudFileGroup = OzgCloudFileGroupTestFactory.createBuilder()
+				.clearFiles().file(ozgCloudFile)
+				.build();
+		private final OzgCloudFormField ozgCloudFormField = OzgCloudFormField.builder()
+				.name(FormDataEntryTestFactory.FORM_FIELD_NAME)
+				.label(FormDataEntryTestFactory.FORM_FIELD_LABEL)
+				.value(FormDataEntryTestFactory.FORM_FIELD_VALUE)
+				.build();
+
+		private final OzgCloudFormField ozgCloudSubFormFormField = OzgCloudFormField.builder()
+				.name(FormDataEntryTestFactory.SUB_FORM_FIELD_NAME)
+				.label(FormDataEntryTestFactory.SUB_FORM_FIELD_LABEL)
+				.value(FormDataEntryTestFactory.SUB_FORM_FIELD_VALUE)
+				.build();
+
+		private final OzgCloudSubForm ozgCloudSubForm = OzgCloudSubForm.builder()
+				.name(FormDataEntryTestFactory.SUB_FORM_NAME)
+				.label(FormDataEntryTestFactory.SUB_FORM_LABEL)
+				.formEntry(ozgCloudSubFormFormField)
+				.build();
+
+		private final OzgCloudEingang ozgCloudEingang = OzgCloudVorgangEingangTestFactory.createBuilder()
+				.antragsteller(ozgCloudAntragsteller)
+				.clearAttachments().attachment(ozgCloudFileGroup)
+				.clearRepresentations().representation(ozgCloudFile)
+				.formDataEntrys(List.of(ozgCloudSubForm, ozgCloudFormField))
+				.build();
+
+		@BeforeEach
+		void mock() {
+			when(antragstellerMapper.fromOzgCloudAntragsteller(any())).thenReturn(AntragstellerTestFactory.create());
+			when(fileGroupMapper.fromOzgCloudFileGroup(any())).thenReturn(FileGroupTestFactory.create());
+			when(fileMapper.fromOzgCloudFile(any())).thenReturn(FileTestFactory.create());
+			when(formDataMapper.fromOzgCloudEntries(any()))
+					.thenReturn(List.of(FormDataEntryTestFactory.createFormField(), FormDataEntryTestFactory.createSubForm()));
+		}
+
+		@Test
+		void shouldCallAntragstellerMapper() {
+			mapper.fromOzgCloudEingang(ozgCloudEingang);
+
+			verify(antragstellerMapper).fromOzgCloudAntragsteller(ozgCloudAntragsteller);
+		}
+
+		@Test
+		void shouldCallFileGroupMapper() {
+			mapper.fromOzgCloudEingang(ozgCloudEingang);
+
+			verify(fileGroupMapper).fromOzgCloudFileGroup(ozgCloudFileGroup);
+		}
+
+		@Test
+		void shouldCallFileMapper() {
+			mapper.fromOzgCloudEingang(ozgCloudEingang);
+
+			verify(fileMapper).fromOzgCloudFile(ozgCloudFile);
+		}
+
+		@Test
+		void shouldMap() {
+			var eingang = mapper.fromOzgCloudEingang(OzgCloudVorgangEingangTestFactory.create());
+
+			assertThat(eingang).usingRecursiveComparison().isEqualTo(EingangTestFactory.create());
+		}
+	}
+
+	@DisplayName("To grpc")
+	@Nested
+	class TestToGrpc {
+
+		@BeforeEach
+		void mock() {
+			when(antragstellerMapper.toGrpc(any())).thenReturn(GrpcAntragstellerTestFactory.create());
+			when(fileGroupMapper.toGrpc(any())).thenReturn(GrpcFileGroupTestFactory.create());
+			when(fileMapper.toGrpc(any())).thenReturn(GrpcFileTestFactory.create());
+			when(formDataMapper.toGrpcFormData(any())).thenReturn(GrpcFormDataTestFactory.create());
+		}
+
+		@Test
+		void shouldCallAntragstellerMapper() {
+			mapper.toGrpc(EingangTestFactory.create());
+
+			verify(antragstellerMapper).toGrpc(EingangTestFactory.ANTRAGSTELLER);
+		}
+
+		@Test
+		void shouldCallFileGroupMapper() {
+			mapper.toGrpc(EingangTestFactory.create());
+
+			verify(fileGroupMapper).toGrpc(EingangTestFactory.ATTACHMENT);
+		}
+
+		@Test
+		void shouldCallFileMapper() {
+			mapper.toGrpc(EingangTestFactory.create());
+
+			verify(fileMapper).toGrpc(EingangTestFactory.REPRESENTATION);
+		}
+
+		@Test
+		void shouldMap() {
+			var eingang = mapper.toGrpc(EingangTestFactory.create());
+
+			assertThat(eingang).usingRecursiveComparison().ignoringFields("memoizedHashCode").isEqualTo(GrpcEingangTestFactory.create());
+		}
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0f34589b0f4f38bf713408dece96c08d3dc6b67c
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileGroupMapperTest.java
@@ -0,0 +1,77 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+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.mapstruct.factory.Mappers;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import de.ozgcloud.apilib.file.OzgCloudFile;
+import de.ozgcloud.apilib.file.OzgCloudFileGroup;
+import de.ozgcloud.apilib.file.OzgCloudFileTestFactory;
+import de.ozgcloud.apilib.vorgang.grpc.OzgCloudFileGroupTestFactory;
+
+class CollaborationFileGroupMapperTest {
+
+	@InjectMocks
+	private final CollaborationFileGroupMapper mapper = Mappers.getMapper(CollaborationFileGroupMapper.class);
+	@Mock
+	private final CollaborationFileMapper fileMapper = Mappers.getMapper(CollaborationFileMapper.class);
+
+	@DisplayName("From ozgCloudFileGroup")
+	@Nested
+	class TestFromOzgCloudFileGroup {
+
+		private final OzgCloudFile ozgCloudFile = OzgCloudFileTestFactory.create();
+		private final OzgCloudFileGroup ozgCloudFileGroup = OzgCloudFileGroupTestFactory.createBuilder().clearFiles().file(ozgCloudFile).build();
+
+		@BeforeEach
+		void mock() {
+			when(fileMapper.fromOzgCloudFile(any())).thenReturn(FileTestFactory.create());
+		}
+
+		@Test
+		void shouldCallFileMapper() {
+			mapper.fromOzgCloudFileGroup(ozgCloudFileGroup);
+
+			verify(fileMapper).fromOzgCloudFile(ozgCloudFile);
+		}
+
+		@Test
+		void shouldMap() {
+			var fileGroup = mapper.fromOzgCloudFileGroup(OzgCloudFileGroupTestFactory.create());
+
+			assertThat(fileGroup).usingRecursiveComparison().isEqualTo(FileGroupTestFactory.create());
+		}
+	}
+
+	@DisplayName("To grpc")
+	@Nested
+	class TestToGrpc {
+
+		@BeforeEach
+		void mock() {
+			when(fileMapper.toGrpc(any())).thenReturn(GrpcFileTestFactory.create());
+		}
+
+		@Test
+		void shouldCallFileMapper() {
+			mapper.toGrpc(FileGroupTestFactory.create());
+
+			verify(fileMapper).toGrpc(FileGroupTestFactory.FILE);
+		}
+
+		@Test
+		void shouldMap() {
+			var fileGroup = mapper.toGrpc(FileGroupTestFactory.create());
+
+			assertThat(fileGroup).usingRecursiveComparison().isEqualTo(GrpcFileGroupTestFactory.create());
+		}
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..89d39fc4ca2e38e9cd182263960a0c40c1551b5f
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFileMapperTest.java
@@ -0,0 +1,27 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import de.ozgcloud.apilib.file.OzgCloudFileTestFactory;
+
+class CollaborationFileMapperTest {
+
+	private final CollaborationFileMapper mapper = Mappers.getMapper(CollaborationFileMapper.class);
+
+	@Test
+	void shouldMapFromOzgCloudFile() {
+		var file = mapper.fromOzgCloudFile(OzgCloudFileTestFactory.createBuilder().id(FileTestFactory.ID).build());
+
+		assertThat(file).usingRecursiveComparison().isEqualTo(FileTestFactory.create());
+	}
+
+	@Test
+	void shouldMapToGrpc() {
+		var file = mapper.toGrpc(FileTestFactory.create());
+
+		assertThat(file).usingRecursiveComparison().isEqualTo(GrpcFileTestFactory.create());
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapperTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..319b7668c433d20de683f5290aa81f14c5f4d33d
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationFormDataMapperTest.java
@@ -0,0 +1,139 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static de.ozgcloud.collaboration.vorgang.FormDataEntryTestFactory.*;
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.List;
+
+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.mapstruct.factory.Mappers;
+import org.mockito.Spy;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudFormDataEntry;
+import de.ozgcloud.apilib.vorgang.OzgCloudFormField;
+import de.ozgcloud.apilib.vorgang.OzgCloudSubForm;
+import de.ozgcloud.collaboration.GrpcFormField;
+import de.ozgcloud.collaboration.GrpcSubForm;
+import de.ozgcloud.collaboration.GrpcSubFormData;
+
+class CollaborationFormDataMapperTest {
+
+	@Spy
+	private final CollaborationFormDataMapper mapper = Mappers.getMapper(CollaborationFormDataMapper.class);
+
+	@DisplayName("From ozgCloudEntries")
+	@Nested
+	class TestFromOzgCloudEntries {
+
+		private final OzgCloudFormField ozgCloudFormField = OzgCloudFormField.builder().name(FORM_FIELD_NAME).label(FORM_FIELD_LABEL)
+				.value(FORM_FIELD_VALUE).build();
+		private final OzgCloudSubForm ozgCloudSubForm = OzgCloudSubForm.builder().name(SUB_FORM_NAME).label(SUB_FORM_LABEL)
+				.formEntry(OzgCloudFormField.builder().name(SUB_FORM_FIELD_NAME).label(SUB_FORM_FIELD_LABEL).value(SUB_FORM_FIELD_VALUE).build())
+				.build();
+		private final List<OzgCloudFormDataEntry> ozgCloudEntries = List.of(ozgCloudFormField, ozgCloudSubForm);
+
+		private final FormField formField = FormDataEntryTestFactory.createFormField();
+		private final SubForm subForm = FormDataEntryTestFactory.createSubForm();
+
+		@BeforeEach
+		void mock() {
+			doReturn(formField).when(mapper).fromOzgCloudFormField(any());
+			doReturn(subForm).when(mapper).fromOzgCloudSubForm(any());
+		}
+
+		@Test
+		void shouldMap() {
+			var entries = mapper.fromOzgCloudEntries(ozgCloudEntries);
+
+			assertThat(entries).containsExactly(formField, subForm);
+		}
+	}
+
+	@DisplayName("From ozgCloudSubForm")
+	@Nested
+	class TestFromOzgCloudSubForm {
+
+		private final OzgCloudFormField ozgCloudFormField = OzgCloudFormField.builder()
+				.name(FormDataEntryTestFactory.FORM_FIELD_NAME)
+				.label(FormDataEntryTestFactory.FORM_FIELD_LABEL)
+				.value(FormDataEntryTestFactory.FORM_FIELD_VALUE)
+				.build();
+
+		private final OzgCloudFormField ozgCloudSubFormFormField = OzgCloudFormField.builder()
+				.name(FormDataEntryTestFactory.SUB_FORM_FIELD_NAME)
+				.label(FormDataEntryTestFactory.SUB_FORM_FIELD_LABEL)
+				.value(FormDataEntryTestFactory.SUB_FORM_FIELD_VALUE)
+				.build();
+		private final OzgCloudSubForm ozgCloudSubForm = OzgCloudSubForm.builder()
+				.name(FormDataEntryTestFactory.SUB_FORM_NAME)
+				.label(FormDataEntryTestFactory.SUB_FORM_LABEL)
+				.formEntry(ozgCloudSubFormFormField)
+				.build();
+
+		@Test
+		void shouldMapFormField() {
+			var formField = mapper.fromOzgCloudFormField(ozgCloudFormField);
+
+			assertThat(formField).usingRecursiveComparison().isEqualTo(FormDataEntryTestFactory.createFormField());
+		}
+
+		@Test
+		void shouldMapSubForm() {
+			var subForm = mapper.fromOzgCloudSubForm(ozgCloudSubForm);
+
+			assertThat(subForm).usingRecursiveComparison().isEqualTo(FormDataEntryTestFactory.createSubForm());
+		}
+	}
+
+	@DisplayName("To grpcFormData")
+	@Nested
+	class TestToGrpcFormData {
+
+		private final FormField formField = FormDataEntryTestFactory.createFormField();
+		private final SubForm subForm = FormDataEntryTestFactory.createSubForm();
+		private List<FormDataEntry> entries = List.of(formField, subForm);
+
+		private final GrpcFormField grpcFormField = GrpcFormDataTestFactory.createFormField();
+		private final GrpcSubForm grpcSubForm = GrpcFormDataTestFactory.createSubForm();
+
+		private final GrpcSubFormData grpcSubFormDataFormField = GrpcFormDataTestFactory.createSubFormDataField();
+		private final GrpcSubFormData grpcSubFormDataSubForm = GrpcFormDataTestFactory.createSubFormDataForm();
+
+		@BeforeEach
+		void mock() {
+			doReturn(grpcFormField).when(mapper).toGrpcFormField(any());
+			doReturn(grpcSubForm).when(mapper).toGrpcSubForm(any());
+		}
+
+		@Test
+		void shouldMap() {
+			var formData = mapper.toGrpcFormData(entries);
+
+			assertThat(formData.getFormDataList()).containsExactly(grpcSubFormDataFormField, grpcSubFormDataSubForm);
+		}
+	}
+
+	@DisplayName("To grpc")
+	@Nested
+	class TestToGrpc {
+
+		@Test
+		void shouldMapFormField() {
+			var formField = mapper.toGrpcFormField(FormDataEntryTestFactory.createFormField());
+
+			assertThat(formField).usingRecursiveComparison().isEqualTo(GrpcFormDataTestFactory.createFormField());
+		}
+
+		@Test
+		void shouldMapSubForm() {
+			var subForm = mapper.toGrpcSubForm(FormDataEntryTestFactory.createSubForm());
+
+			assertThat(subForm).usingRecursiveComparison().isEqualTo(GrpcFormDataTestFactory.createSubForm());
+		}
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f934ea72fba99509a37fc792f7de28d777d08159
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationRequestTestFactory.java
@@ -0,0 +1,19 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+public class CollaborationRequestTestFactory {
+
+	public static final String TITLE = LoremIpsum.getInstance().getWords(5);
+	public static final String TEXT = LoremIpsum.getInstance().getParagraphs(5, 20);
+
+	public static CollaborationRequest create() {
+		return createBuilder().build();
+	}
+
+	public static CollaborationRequest.CollaborationRequestBuilder createBuilder() {
+		return CollaborationRequest.builder()
+				.title(TITLE)
+				.text(TEXT);
+	}
+}
\ 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
new file mode 100644
index 0000000000000000000000000000000000000000..9d9e42a9a16070bb70aa471743d3f63369e66bad
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/CollaborationVorgangMapperTest.java
@@ -0,0 +1,91 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+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.mapstruct.factory.Mappers;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudEingang;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgang;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangEingangTestFactory;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory;
+
+class CollaborationVorgangMapperTest {
+
+	@InjectMocks
+	private final CollaborationVorgangMapper mapper = Mappers.getMapper(CollaborationVorgangMapper.class);
+	@Mock
+	private final CollaborationEingangMapper eingangMapper = Mappers.getMapper(CollaborationEingangMapper.class);
+	@Mock
+	private final CollaborationRequestMapper collaborationRequestMapper = Mappers.getMapper(CollaborationRequestMapper.class);
+
+	@DisplayName("From ozgCloudVorgang")
+	@Nested
+	class TestFromOzgCloudVorgang {
+
+		private final OzgCloudEingang ozgCloudEingang = OzgCloudVorgangEingangTestFactory.create();
+		private final OzgCloudVorgang ozgCloudVorgang = OzgCloudVorgangTestFactory.createBuilder()
+				.id(VorgangTestFactory.ID)
+				.clearEingangs().eingang(ozgCloudEingang)
+				.build();
+
+		@BeforeEach
+		void mock() {
+			when(eingangMapper.fromOzgCloudEingang(any())).thenReturn(EingangTestFactory.create());
+		}
+
+		@Test
+		void shouldCallEingangMapper() {
+			mapper.fromOzgCloudVorgang(ozgCloudVorgang);
+
+			verify(eingangMapper).fromOzgCloudEingang(ozgCloudEingang);
+		}
+
+		@Test
+		void shouldMap() {
+			var mappedVorgang = mapper.fromOzgCloudVorgang(ozgCloudVorgang);
+
+			assertThat(mappedVorgang).usingRecursiveComparison().ignoringFields("collaborationRequest")
+					.isEqualTo(VorgangTestFactory.create());
+		}
+	}
+
+	@DisplayName("To grpc")
+	@Nested
+	class TestToGrpc {
+
+		@BeforeEach
+		void mock() {
+			when(eingangMapper.toGrpc(any())).thenReturn(GrpcEingangTestFactory.create());
+			when(collaborationRequestMapper.toGrpc(any())).thenReturn(GrpcCollaborationRequestTestFactory.create());
+		}
+
+		@Test
+		void shouldCallEingangMapper() {
+			mapper.toGrpc(VorgangTestFactory.create());
+
+			verify(eingangMapper).toGrpc(VorgangTestFactory.EINGANG);
+		}
+
+		@Test
+		void shouldCallCollaborationRequestMapper() {
+			mapper.toGrpc(VorgangTestFactory.create());
+
+			verify(collaborationRequestMapper).toGrpc(VorgangTestFactory.COLLABORATION_REQUEST);
+		}
+
+		@Test
+		void shouldMap() {
+			var vorgang = mapper.toGrpc(VorgangTestFactory.create());
+
+			assertThat(vorgang).usingRecursiveComparison().ignoringFields("memoizedHashCode").isEqualTo(GrpcVorgangTestFactory.create());
+		}
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/EingangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/EingangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..13ecf8508a3eb39922b699da3233e419bc463abf
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/EingangTestFactory.java
@@ -0,0 +1,26 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.List;
+
+public class EingangTestFactory {
+
+	public final static Antragsteller ANTRAGSTELLER = AntragstellerTestFactory.create();
+	public final static FileGroup ATTACHMENT = FileGroupTestFactory.create();
+	public final static File REPRESENTATION = FileTestFactory.create();
+
+	public final static FormField FORM_FIELD = FormDataEntryTestFactory.createFormField();
+	public final static SubForm SUB_FORM = FormDataEntryTestFactory.createSubForm();
+	public final static List<FormDataEntry> FORM_DATA_ENTRIES = List.of(FORM_FIELD, SUB_FORM);
+
+	public static Eingang create() {
+		return createBuilder().build();
+	}
+
+	public static Eingang.EingangBuilder createBuilder() {
+		return Eingang.builder()
+				.antragsteller(ANTRAGSTELLER)
+				.attachment(ATTACHMENT)
+				.representation(REPRESENTATION)
+				.formDataEntrys(FORM_DATA_ENTRIES);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileGroupTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileGroupTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..3323db42e4b248ec3183256f3cc18b9895624d48
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileGroupTestFactory.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.collaboration.vorgang;
+
+public class FileGroupTestFactory {
+
+	public static final String NAME = "File Group Name";
+
+	public static final File FILE = FileTestFactory.create();
+
+	public static FileGroup create() {
+		return createBuilder().build();
+	}
+
+	public static FileGroup.FileGroupBuilder createBuilder() {
+		return FileGroup.builder()
+				.name(NAME)
+				.file(FILE);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..49bc54e7ab2f126e5f8643ee9bffbca553328b10
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FileTestFactory.java
@@ -0,0 +1,25 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.util.UUID;
+
+import de.ozgcloud.apilib.file.OzgCloudFileId;
+
+public class FileTestFactory {
+
+	public static final OzgCloudFileId ID = OzgCloudFileId.from(UUID.randomUUID().toString());
+	public static final String NAME = "testfile.pdf";
+	public static final String CONTENT_TYPE = "application/pdf";
+	public static final long SIZE = 1024;
+
+	public static File create() {
+		return createBuilder().build();
+	}
+
+	public static File.FileBuilder createBuilder() {
+		return File.builder()
+				.id(ID)
+				.name(NAME)
+				.contentType(CONTENT_TYPE)
+				.size(SIZE);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FormDataEntryTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FormDataEntryTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c39cca8eb039edc4da181d5599b2123b798b633
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/FormDataEntryTestFactory.java
@@ -0,0 +1,41 @@
+package de.ozgcloud.collaboration.vorgang;
+
+public class FormDataEntryTestFactory {
+
+	public final static String FORM_FIELD_NAME = "name";
+	public final static String FORM_FIELD_LABEL = "label";
+	public final static String FORM_FIELD_VALUE = "value";
+
+	public final static String SUB_FORM_NAME = "sub-form-name";
+	public final static String SUB_FORM_LABEL = "sub-form-label";
+	public final static String SUB_FORM_FIELD_NAME = "sub-form-field-name";
+	public final static String SUB_FORM_FIELD_LABEL = "sub-form-field-label";
+	public final static String SUB_FORM_FIELD_VALUE = "sub-form-field-value";
+	public final static FormField SUB_FORM_FORM_FIELD = createFormFieldBuilder()
+			.name(SUB_FORM_FIELD_NAME)
+			.label(SUB_FORM_FIELD_LABEL)
+			.value(SUB_FORM_FIELD_VALUE)
+			.build();
+
+	public static FormField createFormField() {
+		return createFormFieldBuilder().build();
+	}
+
+	public static FormField.FormFieldBuilder createFormFieldBuilder() {
+		return FormField.builder()
+				.name(FORM_FIELD_NAME)
+				.label(FORM_FIELD_LABEL)
+				.value(FORM_FIELD_VALUE);
+	}
+
+	public static SubForm createSubForm() {
+		return createSubFormBuilder().build();
+	}
+
+	public static SubForm.SubFormBuilder createSubFormBuilder() {
+		return SubForm.builder()
+				.name(SUB_FORM_NAME)
+				.label(SUB_FORM_LABEL)
+				.formEntry(SUB_FORM_FORM_FIELD);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcAntragstellerTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcAntragstellerTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..6d055fc0d8b826f8e95a6f7584cedcbd9e1c90d7
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcAntragstellerTestFactory.java
@@ -0,0 +1,30 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static de.ozgcloud.collaboration.vorgang.AntragstellerTestFactory.*;
+
+import de.ozgcloud.collaboration.GrpcAntragsteller;
+
+public class GrpcAntragstellerTestFactory {
+
+	public static GrpcAntragsteller create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcAntragsteller.Builder createBuilder() {
+		return GrpcAntragsteller.newBuilder()
+				.setAnrede(ANREDE)
+				.setVorname(FIRSTNAME)
+				.setNachname(NACHNAME)
+				.setFirmaName(FIRMA_NAME)
+				.setGeburtsdatum(GEBURTSDATUM)
+				.setGeburtsort(GEBURTSORT)
+				.setGeburtsname(GEBURTSNAME)
+				.setStrasse(STRASSE)
+				.setHausnummer(HAUSNUMMER)
+				.setPlz(PLZ)
+				.setOrt(ORT)
+				.setEmail(E_MAIL)
+				.setTelefon(TELEFON)
+				.setOtherData(GrpcFormDataTestFactory.create());
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..382a7ab7957b016041f4a33a7b8b0263ecc8dbeb
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcCollaborationRequestTestFactory.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static de.ozgcloud.collaboration.vorgang.CollaborationRequestTestFactory.*;
+
+import de.ozgcloud.collaboration.GrpcCollaborationRequest;
+
+public class GrpcCollaborationRequestTestFactory {
+
+	public static GrpcCollaborationRequest create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcCollaborationRequest.Builder createBuilder() {
+		return GrpcCollaborationRequest.newBuilder()
+				.setTitle(TITLE)
+				.setText(TEXT);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcEingangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcEingangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..250a7a8e4f1f098f9a15ec3dd8709cf7a16abb6c
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcEingangTestFactory.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import de.ozgcloud.collaboration.GrpcEingang;
+
+public class GrpcEingangTestFactory {
+
+	public static GrpcEingang create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcEingang.Builder createBuilder() {
+		return GrpcEingang.newBuilder()
+				.setAntragsteller(GrpcAntragstellerTestFactory.create())
+				.addAttachments(GrpcFileGroupTestFactory.create())
+				.addRepresentations(GrpcFileTestFactory.create())
+				.setFormData(GrpcFormDataTestFactory.create());
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileGroupTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileGroupTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..17345509931cbc6d9e689e565a1347db0bc02da0
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileGroupTestFactory.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static de.ozgcloud.collaboration.vorgang.FileGroupTestFactory.*;
+
+import de.ozgcloud.collaboration.GrpcFileGroup;
+
+public class GrpcFileGroupTestFactory {
+
+	public static GrpcFileGroup create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcFileGroup.Builder createBuilder() {
+		return GrpcFileGroup.newBuilder()
+				.setName(NAME)
+				.addFiles(GrpcFileTestFactory.create());
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..2eda2e0ec02851dbf682f09bd9db9011de657e1e
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFileTestFactory.java
@@ -0,0 +1,20 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static de.ozgcloud.collaboration.vorgang.FileTestFactory.*;
+
+import de.ozgcloud.collaboration.GrpcFile;
+
+public class GrpcFileTestFactory {
+
+	public static GrpcFile create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcFile.Builder createBuilder() {
+		return GrpcFile.newBuilder()
+				.setId(ID.toString())
+				.setName(NAME)
+				.setContentType(CONTENT_TYPE)
+				.setSize(SIZE);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFormDataTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFormDataTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9e12a1cd2cdba573bcf66a39f4e1edcf2f0baf5a
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcFormDataTestFactory.java
@@ -0,0 +1,56 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import de.ozgcloud.collaboration.GrpcFormData;
+import de.ozgcloud.collaboration.GrpcFormField;
+import de.ozgcloud.collaboration.GrpcSubForm;
+import de.ozgcloud.collaboration.GrpcSubFormData;
+
+public class GrpcFormDataTestFactory {
+
+	public static final GrpcSubFormData SUB_FORM_FORM_FIELD = GrpcSubFormData.newBuilder().setField(
+			GrpcFormField.newBuilder()
+					.setName(FormDataEntryTestFactory.SUB_FORM_FIELD_NAME)
+					.setValue(FormDataEntryTestFactory.SUB_FORM_FIELD_VALUE)
+					.setLabel(FormDataEntryTestFactory.SUB_FORM_FIELD_LABEL).build())
+			.build();
+
+	public static final GrpcFormData create() {
+		return createBuilder().build();
+	}
+
+	public static final GrpcFormData.Builder createBuilder() {
+		return GrpcFormData.newBuilder()
+				.addFormData(createSubFormDataForm())
+				.addFormData(createSubFormDataField());
+	}
+
+	public static final GrpcSubFormData createSubFormDataForm() {
+		return GrpcSubFormData.newBuilder().setForm(createSubForm()).build();
+	}
+
+	public static final GrpcSubForm createSubForm() {
+		return createSubFormBuilder().build();
+	}
+
+	public static final GrpcSubForm.Builder createSubFormBuilder() {
+		return GrpcSubForm.newBuilder()
+				.setName(FormDataEntryTestFactory.SUB_FORM_NAME)
+				.setLabel(FormDataEntryTestFactory.SUB_FORM_LABEL)
+				.addFormData(SUB_FORM_FORM_FIELD);
+	}
+
+	public static final GrpcSubFormData createSubFormDataField() {
+		return GrpcSubFormData.newBuilder().setField(createFormField()).build();
+	}
+
+	public static final GrpcFormField createFormField() {
+		return createFormFieldBuilder().build();
+	}
+
+	public static final GrpcFormField.Builder createFormFieldBuilder() {
+		return GrpcFormField.newBuilder()
+				.setName(FormDataEntryTestFactory.FORM_FIELD_NAME)
+				.setValue(FormDataEntryTestFactory.FORM_FIELD_VALUE)
+				.setLabel(FormDataEntryTestFactory.FORM_FIELD_LABEL);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangHeaderTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangHeaderTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..9eb723cddf1961777fa375d77b985a0749a62882
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangHeaderTestFactory.java
@@ -0,0 +1,27 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.time.ZonedDateTime;
+import java.util.UUID;
+
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStatus;
+import de.ozgcloud.collaboration.GrpcVorgangHeader;
+
+public class GrpcVorgangHeaderTestFactory {
+
+	public final static OzgCloudVorgangStatus STATUS = OzgCloudVorgangStatus.from("WORKING");
+	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 OzgCloudUserId ASSIGNED_TO = OzgCloudUserId.from(UUID.randomUUID().toString());
+	public final static String AKTENZEICHEN = "DE_12345_XY";
+
+	public static GrpcVorgangHeader create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcVorgangHeader.Builder createBuilder() {
+		return GrpcVorgangHeader.newBuilder()
+				.setCreatedAt(CREATED_AT_STR)
+				.setAktenzeichen(AKTENZEICHEN);
+	}
+}
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..73d85ddb6d844cd850b090119a9d67a7b7f446d2
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/GrpcVorgangTestFactory.java
@@ -0,0 +1,23 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import static de.ozgcloud.collaboration.vorgang.VorgangTestFactory.*;
+
+import de.ozgcloud.collaboration.GrpcVorgang;
+
+public class GrpcVorgangTestFactory {
+
+	public static GrpcVorgang create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcVorgang.Builder createBuilder() {
+		return GrpcVorgang.newBuilder()
+				.setId(ID.toString())
+				.setVersion(VERSION)
+				.setVorgangName(VORGANG_NAME)
+				.setVorgangNummer(VORGANG_NUMMER)
+				.setHeader(GrpcVorgangHeaderTestFactory.create())
+				.setEingang(GrpcEingangTestFactory.create())
+				.setCollaborationRequest(GrpcCollaborationRequestTestFactory.create());
+	}
+}
\ No newline at end of file
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
new file mode 100644
index 0000000000000000000000000000000000000000..0dd77436474c823413748fe40134f5032e35fda0
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangHeaderTestFactory.java
@@ -0,0 +1,20 @@
+package de.ozgcloud.collaboration.vorgang;
+
+import java.time.ZonedDateTime;
+
+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 static VorgangHeader create() {
+		return createBuilder().build();
+	}
+
+	public static VorgangHeader.VorgangHeaderBuilder createBuilder() {
+		return VorgangHeader.builder()
+				.createdAt(CREATED_AT)
+				.aktenzeichen(AKTENZEICHEN);
+	}
+}
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java
index e0ca71a149a516a4b63481fbeff58cd43e33031c..28a3dc99931cc6127dd3368c80622da58cc7644b 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangRemoteServiceTest.java
@@ -24,6 +24,7 @@
 package de.ozgcloud.collaboration.vorgang;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -33,6 +34,9 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgang;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory;
 import de.ozgcloud.collaboration.CollaborationCallContextAttachingInterceptor;
 import de.ozgcloud.collaboration.CollaborationManagerCollaborationRequestMapper;
 import de.ozgcloud.collaboration.CollaborationRequest;
@@ -55,7 +59,10 @@ class VorgangRemoteServiceTest {
 	private CollaborationManagerCollaborationRequestMapper collaborationRequestMapper;
 	@Mock
 	private CollaborationCallContextAttachingInterceptor callContextInterceptor;
-
+	@Mock
+	private OzgCloudVorgangService ozgCloudVorgangService;
+	@Mock
+	private CollaborationVorgangMapper mapper;
 
 	@Nested
 	class TestCreateCollaborationVorgang {
@@ -150,4 +157,37 @@ class VorgangRemoteServiceTest {
 		}
 	}
 
+	@Nested
+	class TestGetVorgang {
+
+		private static final OzgCloudVorgang OZG_CLOUD_VORGANG = OzgCloudVorgangTestFactory.create();
+		private static final Vorgang VORGANG = VorgangTestFactory.create();
+
+		@BeforeEach
+		void init() {
+			when(ozgCloudVorgangService.getById(any())).thenReturn(OZG_CLOUD_VORGANG);
+			when(mapper.fromOzgCloudVorgang(any())).thenReturn(VORGANG);
+		}
+
+		@Test
+		void shouldCallOzgCloudVorgangService() {
+			service.getVorgang(OzgCloudVorgangTestFactory.ID);
+
+			verify(ozgCloudVorgangService).getById(OzgCloudVorgangTestFactory.ID);
+		}
+
+		@Test
+		void shouldCallMapper() {
+			service.getVorgang(OzgCloudVorgangTestFactory.ID);
+
+			verify(mapper).fromOzgCloudVorgang(OZG_CLOUD_VORGANG);
+		}
+
+		@Test
+		void shouldReturnVorgang() {
+			var result = service.getVorgang(OzgCloudVorgangTestFactory.ID);
+
+			assertThat(result).isSameAs(VORGANG);
+		}
+	}
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java
index 5e00c47b4f2c8d7c84871eb12d7483f233e33c03..52da9558c1de60b5ca18434929039a2104ae7bcd 100644
--- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangServiceTest.java
@@ -24,13 +24,16 @@
 package de.ozgcloud.collaboration.vorgang;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory;
 import de.ozgcloud.collaboration.CollaborationRequest;
 import de.ozgcloud.collaboration.CollaborationRequestTestFactory;
 import de.ozgcloud.command.CommandTestFactory;
@@ -65,4 +68,32 @@ class VorgangServiceTest {
 		}
 	}
 
+	@Nested
+	class TestGetVorgang {
+
+		private static final Vorgang VORGANG = VorgangTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			when(vorgangRemoteService.getVorgang(any())).thenReturn(VORGANG);
+		}
+
+		@Test
+		void shouldCallGetVorgang() {
+			getVorgang();
+
+			verify(vorgangRemoteService).getVorgang(OzgCloudVorgangTestFactory.ID);
+		}
+
+		@Test
+		void shouldReturnVorgang() {
+			var result = getVorgang();
+
+			assertThat(result).isEqualTo(VORGANG);
+		}
+
+		private Vorgang getVorgang() {
+			return service.getVorgang(OzgCloudVorgangTestFactory.ID.toString());
+		}
+	}
 }
\ No newline at end of file
diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangTestFactory.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..2781da2948a509c4fd0195528eeadb993cfbf826
--- /dev/null
+++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/vorgang/VorgangTestFactory.java
@@ -0,0 +1,56 @@
+/*
+ * 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.UUID;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId;
+
+public class VorgangTestFactory {
+
+	public static final OzgCloudVorgangId ID = OzgCloudVorgangId.from(UUID.randomUUID().toString());
+	public static final long VERSION = 42L;
+
+	public static final String VORGANG_NAME = "Antrag auf Waffelschein";
+	public static final String VORGANG_NUMMER = "123-abc-XY";
+
+	public static final VorgangHeader HEADER = VorgangHeaderTestFactory.create();
+	public static final Eingang EINGANG = EingangTestFactory.create();
+	public static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create();
+
+	public static Vorgang create() {
+		return createBuilder().build();
+	}
+
+	public static Vorgang.VorgangBuilder createBuilder() {
+		return Vorgang.builder()
+				.id(ID)
+				.version(VERSION)
+				.vorgangName(VORGANG_NAME)
+				.vorgangNummer(VORGANG_NUMMER)
+				.header(HEADER)
+				.eingang(EINGANG)
+				.collaborationRequest(COLLABORATION_REQUEST);
+	}
+}
\ No newline at end of file