diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
index 61d6f145b22eb3861f8c3b380dadf503a656b6a4..dff8ab4e0679810f3eabeabf684ab1095cd08a31 100644
--- a/bescheid-manager/pom.xml
+++ b/bescheid-manager/pom.xml
@@ -17,7 +17,7 @@
 	<properties>
 		<vorgang-manager.version>2.7.0</vorgang-manager.version>
 		<nachrichten-manager.version>2.7.0</nachrichten-manager.version>
-		<api-lib.version>0.8.0</api-lib.version>
+		<api-lib.version>0.9.0-SNAPSHOT</api-lib.version>
 	</properties>
 
 	<dependencies>
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
index 7a98cf91701338396eda4dba01c8e7b71c8751e4..2016ea933f0c61b98a22b8ef0e04492e0df6af6e 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
@@ -40,6 +40,7 @@ import de.ozgcloud.bescheid.Bescheid.SendBy;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.binaryfile.BinaryFileService;
 import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
+import de.ozgcloud.bescheid.common.user.UserProfileService;
 import de.ozgcloud.bescheid.nachricht.NachrichtService;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.command.Command;
@@ -94,6 +95,7 @@ class BescheidEventListener {
 
 	private final ApplicationEventPublisher eventPublisher;
 	private final CurrentUserService userService;
+	private final UserProfileService userProfileService;
 	private final BescheidFeatureProperties bescheidFeatureProperties;
 
 	@EventListener(condition = IS_CREATE_BESCHEID)
@@ -177,7 +179,7 @@ class BescheidEventListener {
 		Optional.ofNullable(eventBody.get(GENEHMIGT_BODYKEY))
 				.map(Object::toString).map(Boolean::valueOf)
 				.ifPresentOrElse(builder::genehmigt, () -> builder.genehmigt(true));
-		builder.createFor(userService.getUserProfile());
+		builder.createFor(userProfileService.getUserProfile());
 
 		return builder.build();
 	}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java
new file mode 100644
index 0000000000000000000000000000000000000000..4cf07e25e4cca9e218a57be1ae82d837639c58d9
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidManagerConfiguration.java
@@ -0,0 +1,47 @@
+/*
+ * 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.bescheid;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
+import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService;
+import de.ozgcloud.bescheid.common.callcontext.BescheidManagerCallContextProvider;
+import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc;
+import net.devh.boot.grpc.client.inject.GrpcClient;
+
+@Configuration
+public class BescheidManagerConfiguration {
+
+	@GrpcClient("command-manager")
+	private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub;
+
+	@Bean("bescheid_OzgCloudCommandService")
+	OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, BescheidManagerCallContextProvider contextProvider) {
+		return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider,
+				GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS);
+	}
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java
index 26d88f90e6d56eec4f4727487e26cf9597107024..bd827b7b2f17effbf96c62304087fcf873925227 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidRequest.java
@@ -2,7 +2,7 @@ package de.ozgcloud.bescheid;
 
 import java.time.LocalDate;
 
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfile;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
 import lombok.Builder;
 import lombok.Getter;
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
index 7d7a715a589b079b30ec971790574dc899ab3cf2..667106fd6da1ee186c2cf9c57f364194340bdc13 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
 import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.attributes.ClientAttributeService;
-import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
+import de.ozgcloud.bescheid.common.user.UserProfileService;
 import de.ozgcloud.bescheid.nachricht.NachrichtService;
 import de.ozgcloud.bescheid.vorgang.Vorgang;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
@@ -33,7 +33,7 @@ class BescheidService {
 	private final VorgangService vorgangService;
 	private final AttachedItemService attachedItemService;
 	private final NachrichtService nachrichtService;
-	private final CurrentUserService currentUserService;
+	private final UserProfileService currentUserService;
 	private final ClientAttributeService bescheidClientAttributeService;
 	private final BuildProperties buildProperties;
 	private final Optional<BescheidRemoteService> remoteService;
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java
index 7a3e82b746121e49326e8d24d2484f41693c912a..a35cfba56298f590a86a02eeb4cddfae30945aaa 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/attacheditem/AttachedItemService.java
@@ -35,6 +35,8 @@ import java.util.stream.Collectors;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
@@ -45,11 +47,9 @@ import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.common.errorhandling.TechnicalException;
-import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 @Service
-@RequiredArgsConstructor
 @Log4j2
 public class AttachedItemService {
 
@@ -61,9 +61,13 @@ public class AttachedItemService {
 
 	private static final Predicate<String> notExpectedSendByValue = sendBy -> !ArrayUtils.contains(Bescheid.SendBy.values(), sendBy);
 
-	private final OzgCloudCommandService commandService;
-	private final VorgangAttachedItemRemoteService remoteService;
-	private final CommandMapper commandMapper;
+	@Autowired
+	@Qualifier("bescheid_OzgCloudCommandService")
+	private OzgCloudCommandService commandService;
+	@Autowired
+	private VorgangAttachedItemRemoteService remoteService;
+	@Autowired
+	private CommandMapper commandMapper;
 
 	public Optional<AttachedItem> findBescheidItem(String vorgangId) {
 		return remoteService.findBescheidDraft(vorgangId);
@@ -179,7 +183,7 @@ public class AttachedItemService {
 	void validateBescheidStatus(AttachedItem bescheid) {
 		var bescheidStatus = MapUtils.getString(bescheid.getItem(), Bescheid.FIELD_STATUS);
 		if (Bescheid.Status.DRAFT.not(bescheidStatus)) {
-			throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'" .formatted(bescheid.getId(), bescheidStatus));
+			throw new TechnicalException("Bescheid draft with ID '%s' has an unexpected status: '%s'".formatted(bescheid.getId(), bescheidStatus));
 		}
 	}
 
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..40cbdaffe962730c81d9c95239babda672aac989
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProvider.java
@@ -0,0 +1,52 @@
+/*
+ * 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.bescheid.common.callcontext;
+
+import java.util.Optional;
+
+import org.springframework.stereotype.Component;
+
+import de.ozgcloud.apilib.common.callcontext.CallContext;
+import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+import lombok.RequiredArgsConstructor;
+
+@Component
+@RequiredArgsConstructor
+public class BescheidManagerCallContextProvider implements OzgCloudCallContextProvider {
+
+	private final CurrentUserService currentUserService;
+
+	@Override
+	public CallContext provideContext() {
+		var callContextBuilder = CallContext.builder().clientName(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
+		getUserId().ifPresent(callContextBuilder::userId);
+		return callContextBuilder.build();
+	}
+
+	Optional<OzgCloudUserId> getUserId() {
+		return currentUserService.getUser().getUserId().map(OzgCloudUserId::from);
+	}
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java
index 4d1287ab868cea9f8e80cc3494ffcec00eb70a3c..b77b10a648b85eb1da8a39dfc30ecd6a00f18cd9 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/CurrentUserService.java
@@ -35,10 +35,7 @@ import org.springframework.security.core.context.SecurityContext;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 
-import de.ozgcloud.apilib.user.OzgCloudUserId;
-import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
 import de.ozgcloud.command.Command;
-import de.ozgcloud.common.errorhandling.TechnicalException;
 import lombok.RequiredArgsConstructor;
 
 @RequiredArgsConstructor
@@ -46,21 +43,11 @@ import lombok.RequiredArgsConstructor;
 public class CurrentUserService {
 
 	private final AuthenticationTrustResolver trustResolver;
-	private final Optional<OzgCloudUserProfileService> userProfileService;
-	private final UserProfileMapper mapper;
 
 	public CallContextUser getUser() {
 		return findUser().orElseThrow(() -> new IllegalStateException("No authenticated User found"));
 	}
 
-	public UserProfile getUserProfile() {
-		var service = userProfileService.orElseThrow(() -> new IllegalStateException("No connection to user-manager configured."));
-
-		return getUser().getUserId().map(OzgCloudUserId::from)
-				.map(service::getById)
-				.map(mapper::mapProfile).orElseThrow(() -> new TechnicalException("Unknown UserId or cannot load user profile."));
-	}
-
 	public Optional<CallContextUser> findUser() {
 		return findTrustedAuthentication()
 				.map(this::mapToCallContextUser)
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfile.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfile.java
deleted file mode 100644
index 1cd483d3afedb2b08408fa9d1035394e01db604b..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfile.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package de.ozgcloud.bescheid.common.callcontext;
-
-import de.ozgcloud.bescheid.UserId;
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class UserProfile {
-
-	private UserId id;
-	private String firstName;
-	private String lastName;
-	private String email;
-}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileMapper.java
deleted file mode 100644
index 7563fe9d5b54622db946ac118073d618a40ded92..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ozgcloud.bescheid.common.callcontext;
-
-import org.mapstruct.Mapper;
-
-import de.ozgcloud.apilib.user.OzgCloudUserId;
-import de.ozgcloud.apilib.user.OzgCloudUserProfile;
-import de.ozgcloud.bescheid.UserId;
-
-@Mapper
-public interface UserProfileMapper {
-
-	UserProfile mapProfile(OzgCloudUserProfile userProfile);
-
-	default UserId mapUserId(OzgCloudUserId id) {
-		return UserId.from(id.toString());
-	}
-}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileTestFactory.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileTestFactory.java
deleted file mode 100644
index 6c3af38e8d5b766849f6e0f46091609dfe3bfcb5..0000000000000000000000000000000000000000
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/callcontext/UserProfileTestFactory.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package de.ozgcloud.bescheid.common.callcontext;
-
-import java.util.UUID;
-
-import com.thedeanda.lorem.LoremIpsum;
-
-import de.ozgcloud.bescheid.UserId;
-
-public class UserProfileTestFactory {
-
-	private static final LoremIpsum LOREM_IPSUM = LoremIpsum.getInstance();
-
-	public static final UserId ID = UserId.from(UUID.randomUUID().toString());
-
-	public static final String FIRST_NAME = LOREM_IPSUM.getFirstName();
-	public static final String LAST_NAME = LOREM_IPSUM.getLastName();
-	public static final String EMAIL = "test-email@local";
-
-	public static UserProfile create() {
-		return createBuilder().build();
-	}
-
-	public static UserProfile.UserProfileBuilder createBuilder() {
-		return UserProfile.builder()
-				.id(ID)
-				.firstName(FIRST_NAME)
-				.lastName(LAST_NAME)
-				.email(EMAIL);
-	}
-}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfile.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfile.java
new file mode 100644
index 0000000000000000000000000000000000000000..889dbbad42e09d5195cc3daa107994e9af542b5f
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfile.java
@@ -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.
+ */
+package de.ozgcloud.bescheid.common.user;
+
+import de.ozgcloud.bescheid.UserId;
+import lombok.Builder;
+import lombok.Getter;
+
+@Builder
+@Getter
+public class UserProfile {
+
+	private UserId id;
+	private String firstName;
+	private String lastName;
+	private String email;
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileMapper.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c7c5ceda1c008597995a38a5306b704226085b6
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileMapper.java
@@ -0,0 +1,40 @@
+/*
+ * 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.bescheid.common.user;
+
+import org.mapstruct.Mapper;
+
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.user.OzgCloudUserProfile;
+import de.ozgcloud.bescheid.UserId;
+
+@Mapper
+public interface UserProfileMapper {
+
+	UserProfile mapProfile(OzgCloudUserProfile userProfile);
+
+	default UserId mapUserId(OzgCloudUserId id) {
+		return UserId.from(id.toString());
+	}
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileService.java
new file mode 100644
index 0000000000000000000000000000000000000000..5346ead50451064408dd1db5146536520b566b99
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileService.java
@@ -0,0 +1,52 @@
+/*
+ * 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.bescheid.common.user;
+
+import java.util.Optional;
+
+import org.springframework.stereotype.Service;
+
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
+import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
+import de.ozgcloud.common.errorhandling.TechnicalException;
+import lombok.RequiredArgsConstructor;
+
+@Service
+@RequiredArgsConstructor
+public class UserProfileService {
+
+	private final CurrentUserService currentUserService;
+	private final Optional<OzgCloudUserProfileService> userProfileService;
+	private final UserProfileMapper mapper;
+
+	public UserProfile getUserProfile() {
+		var service = userProfileService.orElseThrow(() -> new IllegalStateException("No connection to user-manager configured."));
+
+		return currentUserService.getUser().getUserId().map(OzgCloudUserId::from)
+				.map(service::getById)
+				.map(mapper::mapProfile).orElseThrow(() -> new TechnicalException("Unknown UserId or cannot load user profile."));
+	}
+
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileTestFactory.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..8b20aa41c65568e456538a45f3c363d1a18cbded
--- /dev/null
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/common/user/UserProfileTestFactory.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.bescheid.common.user;
+
+import java.util.UUID;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.bescheid.UserId;
+
+public class UserProfileTestFactory {
+
+	private static final LoremIpsum LOREM_IPSUM = LoremIpsum.getInstance();
+
+	public static final UserId ID = UserId.from(UUID.randomUUID().toString());
+
+	public static final String FIRST_NAME = LOREM_IPSUM.getFirstName();
+	public static final String LAST_NAME = LOREM_IPSUM.getLastName();
+	public static final String EMAIL = "test-email@local";
+
+	public static UserProfile create() {
+		return createBuilder().build();
+	}
+
+	public static UserProfile.UserProfileBuilder createBuilder() {
+		return UserProfile.builder()
+				.id(ID)
+				.firstName(FIRST_NAME)
+				.lastName(LAST_NAME)
+				.email(EMAIL);
+	}
+}
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java
index 49dbcf4a62be1cd1de9be68c57eb857b86559163..12268d4e0a14d3a4605f60f2b849033b00b91171 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/nachricht/NachrichtService.java
@@ -8,6 +8,8 @@ import java.util.Optional;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
@@ -19,12 +21,10 @@ import de.ozgcloud.common.errorhandling.TechnicalException;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
 import freemarker.template.TemplateException;
-import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
 @Service
 @Log4j2
-@RequiredArgsConstructor
 public class NachrichtService {
 
 	public static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT";
@@ -35,10 +35,15 @@ public class NachrichtService {
 	static final String FIELD_MAIL_BODY = "mailBody";
 	static final String FIELD_ATTACHMENTS = "attachments";
 
-	private final NachrichtRemoteService remoteService;
-	private final Configuration freemarkerCfg;
-	private final OzgCloudCommandService commandService;
-	private final CommandMapper commandMapper;
+	@Autowired
+	private NachrichtRemoteService remoteService;
+	@Autowired
+	private Configuration freemarkerCfg;
+	@Autowired
+	@Qualifier("bescheid_OzgCloudCommandService")
+	private OzgCloudCommandService commandService;
+	@Autowired
+	private CommandMapper commandMapper;
 
 	static final String SUBJECT = "Ihr Antrag";
 
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java
index 07c961a2ea1358c9f6ffb50daf83c30b4433ea8f..b3ce8a3e1a88daa5cff3e3a4b6af9f6b46ce2e98 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteService.java
@@ -30,7 +30,7 @@ import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import de.ozgcloud.bescheid.Bescheid;
 import de.ozgcloud.bescheid.BescheidRemoteService;
 import de.ozgcloud.bescheid.BescheidRequest;
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfile;
 import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsBescheidRemoteService.SmartDocumentsResponse.SmartDocumentDocument;
 import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsBescheidRemoteService.SmartDocumentsResponse.SmartDocumentFile;
 import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData;
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java
index 8afc3d2ba7b37ed2b79a2574c946473bcf9ae7e6..09b366285262b009acc54f131611760025ef1c5d 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/vorgang/VorgangService.java
@@ -1,22 +1,26 @@
 package de.ozgcloud.bescheid.vorgang;
 
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import lombok.NonNull;
-import lombok.RequiredArgsConstructor;
 
 @Service("bescheid_VorgangService")
-@RequiredArgsConstructor
 public class VorgangService {
 
 	static final String VORGANG_BESCHEIDEN = "VORGANG_BESCHEIDEN";
 
-	private final VorgangRemoteService remoteService;
-	private final OzgCloudCommandService commandService;
-	private final CommandMapper commandMapper;
+	@Autowired
+	private VorgangRemoteService remoteService;
+	@Autowired
+	@Qualifier("bescheid_OzgCloudCommandService")
+	private OzgCloudCommandService commandService;
+	@Autowired
+	private CommandMapper commandMapper;
 
 	public Vorgang getById(@NonNull VorgangId id) {
 		return remoteService.getById(id);
diff --git a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java
index 905af6829977ceeeff99a5b6830f9f8c9a59bb71..54d398b8c5d55ce78f57da999f09df3326d23d99 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/document/DocumentService.java
@@ -31,6 +31,8 @@ import java.util.Optional;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.apilib.common.command.OzgCloudCommand;
@@ -42,10 +44,8 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.common.errorhandling.TechnicalException;
-import lombok.RequiredArgsConstructor;
 
 @Service
-@RequiredArgsConstructor
 public class DocumentService {
 
 	public static final String DOCUMENT_ITEM_NAME = "Document";
@@ -56,10 +56,15 @@ public class DocumentService {
 	public static final String FIELD_DOCUMENT_FILE = "documentFile";
 	public static final String FIELD_NACHRICHT_TEXT = "nachrichtText";
 
-	private final AttachedItemService attachedItemService;
-	private final OzgCloudCommandService commandService;
-	private final CommandMapper commandMapper;
-	private final DocumentMapper documentMapper;
+	@Autowired
+	private AttachedItemService attachedItemService;
+	@Autowired
+	@Qualifier("bescheid_OzgCloudCommandService")
+	private OzgCloudCommandService commandService;
+	@Autowired
+	private CommandMapper commandMapper;
+	@Autowired
+	private DocumentMapper documentMapper;
 
 	public String createBescheidDocument(Command command) {
 		return createBescheidDocument(command, buildItemMap(command));
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
index 749783d0d6158a3f8bcd3379909abe6e28d9e58c..4f6cf30d7290c65804d6a0e36ac0615b0c338a94 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
@@ -15,7 +15,8 @@ import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfileService;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEventTestFactory;
 import de.ozgcloud.command.CommandTestFactory;
@@ -34,6 +35,8 @@ class BescheidEventListenerITCase {
 	@MockBean
 	private CurrentUserService userService;
 	@MockBean
+	private UserProfileService userProfileService;
+	@MockBean
 	private OzgCloudCommandService commandService;
 	@MockBean
 	private CommandMapper commandMapper;
@@ -45,7 +48,7 @@ class BescheidEventListenerITCase {
 
 	@BeforeEach
 	void init() {
-		when(userService.getUserProfile()).thenReturn(userProfile);
+		when(userProfileService.getUserProfile()).thenReturn(userProfile);
 	}
 
 	@Nested
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
index 593195a2ff36a039b2c2ee1d3e65924657d9cacb..1288fbea070e6808012351618bf72a299175d5c1 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerTest.java
@@ -27,8 +27,9 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory;
 import de.ozgcloud.bescheid.binaryfile.BinaryFileService;
 import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
-import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory;
+import de.ozgcloud.bescheid.common.user.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfileService;
+import de.ozgcloud.bescheid.common.user.UserProfileTestFactory;
 import de.ozgcloud.bescheid.nachricht.NachrichtService;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEventTestFactory;
@@ -61,6 +62,8 @@ class BescheidEventListenerTest {
 	private ApplicationEventPublisher eventPublisher;
 	@Mock
 	private CurrentUserService userService;
+	@Mock
+	private UserProfileService userProfileService;
 
 	@Nested
 	class TestOnCreateBescheidCommand {
@@ -215,7 +218,7 @@ class BescheidEventListenerTest {
 		@Test
 		void shouldContainUserProfile() {
 			UserProfile user = UserProfileTestFactory.create();
-			when(userService.getUserProfile()).thenReturn(user);
+			when(userProfileService.getUserProfile()).thenReturn(user);
 
 			var request = listener.createRequest(COMMAND);
 
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
index adbf4523c29c4d37128a2d484876a045d078762a..dbe4f9e43deb4fbcd43ea0b8b960bc3861570174 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidRequestTestFactory.java
@@ -2,7 +2,7 @@ package de.ozgcloud.bescheid;
 
 import java.time.LocalDate;
 
-import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory;
+import de.ozgcloud.bescheid.common.user.UserProfileTestFactory;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
 
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java
index 1c75018438672471dbcd4918ae9bb537f768dc3c..5e7de1cb2f2c2298dcb087b239b88a94ed6e58be 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidServiceTest.java
@@ -26,8 +26,8 @@ import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemTestFactory;
 import de.ozgcloud.bescheid.attributes.ClientAttributeService;
-import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfileService;
 import de.ozgcloud.bescheid.nachricht.NachrichtService;
 import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory;
 import de.ozgcloud.bescheid.vorgang.Vorgang;
@@ -54,7 +54,7 @@ class BescheidServiceTest {
 	@Mock
 	private NachrichtService nachrichtService;
 	@Mock
-	private CurrentUserService currentUserService;
+	private UserProfileService userProfileService;
 	@Mock
 	private UserProfile callContextUser;
 	@Mock
@@ -181,7 +181,7 @@ class BescheidServiceTest {
 
 			doNothing().when(service).validateBescheidSendPostfach(any(), anyLong());
 			lenient().when(callContextUser.getId()).thenReturn(UserId.from("user-id"));
-			lenient().when(currentUserService.getUserProfile()).thenReturn(callContextUser);
+			lenient().when(userProfileService.getUserProfile()).thenReturn(callContextUser);
 		}
 
 		@Test
@@ -358,7 +358,7 @@ class BescheidServiceTest {
 		@BeforeEach
 		void init() {
 			when(callContextUser.getId()).thenReturn(UserId.from(CREATED_BY));
-			when(currentUserService.getUserProfile()).thenReturn(callContextUser);
+			when(userProfileService.getUserProfile()).thenReturn(callContextUser);
 			doReturn(FileId.from(DocumentTestFactory.DOCUMENT_FILE)).when(service).getBescheidFileId(any());
 		}
 
@@ -417,7 +417,7 @@ class BescheidServiceTest {
 		void shouldCallCurrentUserService() {
 			buildBescheid();
 
-			verify(currentUserService).getUserProfile();
+			verify(userProfileService).getUserProfile();
 		}
 
 		@Test
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java
index 12469cfc9df73ca8a18c288c3a6ae5c68f4921cb..b1f74c30adb5f027a3a245c244fae00d0d2cad1a 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidTestFactory.java
@@ -7,7 +7,7 @@ import org.springframework.http.MediaType;
 
 import com.thedeanda.lorem.LoremIpsum;
 
-import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory;
+import de.ozgcloud.bescheid.common.user.UserProfileTestFactory;
 import de.ozgcloud.bescheid.vorgang.ServiceKontoTestFactory;
 import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
 import de.ozgcloud.common.binaryfile.FileId;
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec9d3dee4685bb202d88fe617c8235ad2270b717
--- /dev/null
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/common/callcontext/BescheidManagerCallContextProviderTest.java
@@ -0,0 +1,104 @@
+/*
+ * 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.bescheid.common.callcontext;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.Optional;
+
+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.apilib.user.OzgCloudUserId;
+import de.ozgcloud.bescheid.BescheidCallContextAttachingInterceptor;
+
+class BescheidManagerCallContextProviderTest {
+
+	@Spy
+	@InjectMocks
+	private BescheidManagerCallContextProvider provider;
+
+	@Mock
+	private CurrentUserService currentUserService;
+	@Mock
+	private CallContextUser contextUser;
+	@Mock
+	private OzgCloudUserId userId;
+
+	@Nested
+	class TestProvideContext {
+
+		@BeforeEach
+		void init() {
+			doReturn(Optional.of(userId)).when(provider).getUserId();
+		}
+
+		@Test
+		void shouldCallGetUserId() {
+			provider.provideContext();
+
+			verify(provider).getUserId();
+		}
+
+		@Test
+		void shouldSetUserId() {
+			var result = provider.provideContext();
+
+			assertThat(result.getUserId()).isSameAs(userId);
+		}
+
+		@Test
+		void shouldSetClientName() {
+			var result = provider.provideContext();
+
+			assertThat(result.getClientName()).isEqualTo(BescheidCallContextAttachingInterceptor.BESCHEID_MANAGER_CLIENT_NAME);
+		}
+	}
+
+	@Nested
+	class TestGetUserId {
+
+		private static final String USER_ID = "userId";
+
+		@BeforeEach
+		void init() {
+			when(currentUserService.getUser()).thenReturn(contextUser);
+		}
+
+		@Test
+		void shouldReturnUserId() {
+			when(contextUser.getUserId()).thenReturn(Optional.of(USER_ID));
+
+			var result = provider.getUserId();
+
+			assertThat(result).isPresent().get().hasToString(USER_ID);
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java
index 41ad8368a3b350af6790e6cc20c0d3e327d792ae..5f97a1dec5806f852df409c58870dd56278aa415 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/smartdocuments/SmartDocumentsBescheidRemoteServiceTest.java
@@ -15,7 +15,7 @@ import org.mockito.Spy;
 
 import de.ozgcloud.bescheid.BescheidRequestTestFactory;
 import de.ozgcloud.bescheid.BescheidTestFactory;
-import de.ozgcloud.bescheid.common.callcontext.UserProfileTestFactory;
+import de.ozgcloud.bescheid.common.user.UserProfileTestFactory;
 import de.ozgcloud.bescheid.smartdocuments.SmartDocumentsRequest.CustomerData.UserData;
 import de.ozgcloud.bescheid.vorgang.VorgangTestFactory;
 import de.ozgcloud.common.binaryfile.TempFileUtils;
diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextAuthenticationTokenTestFactory.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextAuthenticationTokenTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..55bc9ffb1fc75bcb130a454657d7a1c8b3c74db8
--- /dev/null
+++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextAuthenticationTokenTestFactory.java
@@ -0,0 +1,31 @@
+/*
+ * 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.vorgang.callcontext;
+
+public class CallContextAuthenticationTokenTestFactory {
+
+	public static CallContextAuthenticationToken create() {
+		return CallContextAuthenticationToken.authenticate(CallContextUserTestFactory.create());
+	}
+}
diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..ecdab688eae1bfd7127f1bf5f220bcf0dc05676a
--- /dev/null
+++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUser.java
@@ -0,0 +1,42 @@
+/*
+ * 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.vorgang.callcontext;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+import org.springframework.security.test.context.support.WithSecurityContext;
+
+@Retention(RetentionPolicy.RUNTIME)
+@WithSecurityContext(factory = WithMockCustomUserSecurityContextFactory.class)
+public @interface WithMockCustomUser {
+
+	String userId() default "default-user-id-0";
+
+	String clientName() default CallContextTestFactory.CLIENT;
+
+	String username() default UserTestFactory.NAME;
+
+	boolean organisationEinheitenIdCheckNecessary() default false;
+}
diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..f88a2454a4d4902772a759c7e54f620ca0d32ac2
--- /dev/null
+++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/WithMockCustomUserSecurityContextFactory.java
@@ -0,0 +1,50 @@
+/*
+ * 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.vorgang.callcontext;
+
+import java.util.Optional;
+
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.test.context.support.WithSecurityContextFactory;
+
+public class WithMockCustomUserSecurityContextFactory implements WithSecurityContextFactory<WithMockCustomUser> {
+
+	@Override
+	public SecurityContext createSecurityContext(WithMockCustomUser annotation) {
+		SecurityContext context = SecurityContextHolder.getContext();
+		context.setAuthentication(CallContextAuthenticationToken.authenticate(createUser(annotation)));
+		return context;
+	}
+
+	CallContextUser createUser(WithMockCustomUser mockCustomUser) {
+		var builder = CallContextUser.builder()
+				.userId(Optional.ofNullable(mockCustomUser.userId()))
+				.userName(Optional.ofNullable(mockCustomUser.username()))
+				.clientName(mockCustomUser.clientName())
+				.organisationEinheitenIdCheckNecessary(mockCustomUser.organisationEinheitenIdCheckNecessary());
+
+		return builder.build();
+	}
+}
diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml
index 157251c1a1f3de988bc1466ff78316d304ff583c..c8f90d5eada01439f5c476210b2d754fa203f527 100644
--- a/vorgang-manager-server/pom.xml
+++ b/vorgang-manager-server/pom.xml
@@ -53,9 +53,9 @@
 		<zufi-manager-interface.version>1.0.0-SNAPSHOT</zufi-manager-interface.version>
 
 		<user-manager-interface.version>2.1.0</user-manager-interface.version>
-		<bescheid-manager.version>1.11.0</bescheid-manager.version>
+		<bescheid-manager.version>1.12.0-SNAPSHOT</bescheid-manager.version>
 		<processor-manager.version>0.4.0</processor-manager.version>
-		<ozgcloud-starter.version>0.7.0</ozgcloud-starter.version>
+		<ozgcloud-starter.version>0.9.0-SNAPSHOT</ozgcloud-starter.version>
 		<nachrichten-manager.version>2.7.0</nachrichten-manager.version>
 		<notification-manager.version>2.7.0</notification-manager.version>
 
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..62811097900c5e6daee5d06831962184579d63b8
--- /dev/null
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerCallContextProvider.java
@@ -0,0 +1,55 @@
+/*
+ * 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.vorgang;
+
+import java.util.Optional;
+
+import org.springframework.context.annotation.Primary;
+import org.springframework.stereotype.Component;
+
+import de.ozgcloud.apilib.common.callcontext.CallContext;
+import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.vorgang.callcontext.CurrentUserService;
+import de.ozgcloud.vorgang.callcontext.VorgangManagerClientCallContextAttachingInterceptor;
+import lombok.RequiredArgsConstructor;
+
+@Component
+@RequiredArgsConstructor
+@Primary
+public class VorgangManagerCallContextProvider implements OzgCloudCallContextProvider {
+
+	private final CurrentUserService currentUserService;
+
+	@Override
+	public CallContext provideContext() {
+		var callContextBuilder = CallContext.builder().clientName(VorgangManagerClientCallContextAttachingInterceptor.VORGANG_MANAGER_CLIENT_NAME);
+		getUserId().ifPresent(callContextBuilder::userId);
+		return callContextBuilder.build();
+	}
+
+	Optional<OzgCloudUserId> getUserId() {
+		return currentUserService.getUser().getUserId().map(OzgCloudUserId::from);
+	}
+}
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java
index 477496a0f283029d0070d996f15b515702a58ba5..685b4dded3009cbecf85b8da24a283cb6db7f84e 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/VorgangManagerServerConfiguration.java
@@ -1,10 +1,17 @@
 package de.ozgcloud.vorgang;
 
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
 
+import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
+import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService;
+import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc;
 import io.mongock.runner.springboot.EnableMongock;
+import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @Configuration
 @EnableMongock
@@ -12,4 +19,13 @@ import io.mongock.runner.springboot.EnableMongock;
 @EnableElasticsearchRepositories(basePackages = "de.ozgcloud.vorgang.common.search")
 public class VorgangManagerServerConfiguration {
 
+	@GrpcClient("command-manager")
+	private CommandServiceGrpc.CommandServiceBlockingStub commandServiceStub;
+
+	@Bean
+	@Primary
+	OzgCloudCommandService grpcOzgCloudCommandService(CommandMapper commandMapper, VorgangManagerCallContextProvider contextProvider) {
+		return new GrpcOzgCloudCommandService(commandServiceStub, commandMapper, contextProvider,
+				GrpcOzgCloudCommandService.DEFAULT_COMMAND_REQUEST_THRESHOLD_MILLIS);
+	}
 }
diff --git a/vorgang-manager-server/src/main/resources/application.yml b/vorgang-manager-server/src/main/resources/application.yml
index b00d8d279e619625334847391eadabd834ea73ff..199ca973f38f2efa7bc7a93b79c20cf21c0d21e0 100644
--- a/vorgang-manager-server/src/main/resources/application.yml
+++ b/vorgang-manager-server/src/main/resources/application.yml
@@ -37,6 +37,10 @@ grpc:
       negotiationType: TLS
     info-manager:
       negotiationType: TLS
+    command-manager:
+      address: self:self
+      negotiationType: PLAINTEXT
+
   server:
     security:
       enabled: true
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
index 74eef7dbb26dfe69c8005de551357a261d07474a..862bcfc0e3bd82d6421482ffe0d34fa0cc75eaea 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidEventListenerITCase.java
@@ -29,16 +29,14 @@ import static org.awaitility.Awaitility.*;
 import static org.mockito.Mockito.*;
 
 import java.util.Map;
-import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
-import org.mockito.Mock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -48,14 +46,15 @@ import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.data.mongodb.gridfs.GridFsTemplate;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.test.annotation.DirtiesContext;
 
 import com.mongodb.client.gridfs.model.GridFSFile;
 
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.user.OzgCloudUserProfile;
+import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
-import de.ozgcloud.bescheid.common.callcontext.CallContextUser;
-import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEvent;
 import de.ozgcloud.command.CommandStatus;
@@ -68,6 +67,7 @@ import de.ozgcloud.nachrichten.postfach.PostfachRemoteService;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory;
+import de.ozgcloud.vorgang.callcontext.CallContextAuthenticationTokenTestFactory;
 import de.ozgcloud.vorgang.command.CommandService;
 import de.ozgcloud.vorgang.command.CommandTestFactory;
 import de.ozgcloud.vorgang.command.CreateCommandRequest;
@@ -83,11 +83,11 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
 		"grpc.client.vorgang-manager.address=in-process:test",
 		"grpc.client.nachrichten-manager.address=in-process:test",
 		"grpc.client.pluto.address=in-process:test",
+		"grpc.client.command-manager.address=in-process:test",
 		"ozgcloud.feature.bescheid.enable-dummy-document-processor=true",
 })
 @DataITCase
 @DirtiesContext
-@Disabled("fix later")
 class BescheidEventListenerITCase {
 
 	@Autowired
@@ -105,11 +105,7 @@ class BescheidEventListenerITCase {
 	@MockBean
 	private PostfachRemoteService postfachRemoteService;
 	@MockBean
-	private CurrentUserService currentUserService;
-	@Mock
-	private CallContextUser callContextUser;
-	@Mock
-	private UserProfile userProfile;
+	private OzgCloudUserProfileService userProfileService;
 
 	@Captor
 	private ArgumentCaptor<BescheidDocumentCreatedEvent> bescheidDocumentCreatedEventCaptor;
@@ -118,9 +114,8 @@ class BescheidEventListenerITCase {
 	void init() {
 		mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME);
 		mongoOperations.dropCollection(Vorgang.COLLECTION_NAME);
-		when(currentUserService.getUser()).thenReturn(callContextUser);
-		when(currentUserService.getUserProfile()).thenReturn(userProfile);
 		when(postfachRemoteService.getPostfachType()).thenReturn("dummy");
+		when(userProfileService.getById(any())).thenReturn(OzgCloudUserProfile.builder().id(OzgCloudUserId.from("user-id")).build());
 	}
 
 	@Nested
@@ -272,13 +267,17 @@ class BescheidEventListenerITCase {
 
 		@BeforeEach
 		void init() {
-			when(userProfile.getId()).thenReturn(UserId.from("user-id"));
-			when(callContextUser.getUserId()).thenReturn(Optional.of("user-id"));
+			SecurityContextHolder.getContext().setAuthentication(CallContextAuthenticationTokenTestFactory.create());
 			vorgangId = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).build()).getId();
 			var documentFileId = mongoOperations.save(createBescheidDocumentAttachedItem(vorgangId)).getId();
 			bescheidItem = mongoOperations.save(createBescheidAttachedItemWithDocument(vorgangId, documentFileId));
 		}
 
+		@AfterAll
+		static void cleanup() {
+			SecurityContextHolder.clearContext();
+		}
+
 		@Test
 		void shouldSuccessfullyCompleteCommand() {
 			commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem));
@@ -291,9 +290,9 @@ class BescheidEventListenerITCase {
 
 		@Test
 		void shouldSetBescheidStatusToSent() {
-			eventPublisher.publishEvent(buildCommandCreatedEvent(vorgangId, bescheidItem));
+			commandService.createCommand(buildCreateCommandRequest(vorgangId, bescheidItem));
 
-			await().atMost(1, TimeUnit.SECONDS).untilAsserted(() -> {
+			await().atMost(60, TimeUnit.SECONDS).untilAsserted(() -> {
 				verify(bescheiTestEventListener).onBescheidSentEvent(bescheidSentEventCaptor.capture());
 				assertThat(loadBescheid(bescheidItem.getId()).getItem()).containsEntry(Bescheid.FIELD_STATUS, Bescheid.Status.SENT.name());
 			});
@@ -365,18 +364,6 @@ class BescheidEventListenerITCase {
 					.build();
 		}
 
-		private CommandCreatedEvent buildCommandCreatedEvent(String vorgangId, VorgangAttachedItem bescheidItem) {
-			var command = CommandTestFactory.createBuilder()
-					.vorgangId(vorgangId)
-					.relationId(bescheidItem.getId())
-					.relationVersion(bescheidItem.getVersion())
-					.order(SEND_BESCHEID_ORDER)
-					.bodyObject(Map.of(BESCHEID_VOM_BODYKEY, "2024-01-01",
-							GENEHMIGT_BODYKEY, true))
-					.build();
-			return new CommandCreatedEvent(command);
-		}
-
 		private CreateCommandRequest buildCreateCommandRequest(String vorgangId, VorgangAttachedItem bescheidItem) {
 			return CreateCommandRequest.builder()
 					.vorgangId(vorgangId)
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java
index 4523bfa243ba39f5ef3fe4581cb2e883a39f4a36..1dfd7f621d1f6249e1aa8cf0b5eb9b8caa63fb64 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceITCase.java
@@ -42,7 +42,8 @@ import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.common.callcontext.CallContextUser;
 import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
-import de.ozgcloud.bescheid.common.callcontext.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfile;
+import de.ozgcloud.bescheid.common.user.UserProfileService;
 import de.ozgcloud.common.test.DataITCase;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem;
@@ -69,6 +70,8 @@ class BescheidGrpcServiceITCase {
 
 	@MockBean
 	private CurrentUserService currentUserService;
+	@MockBean
+	private UserProfileService userProfileService;
 	@Mock
 	private CallContextUser callContextUser;
 	@Mock
@@ -82,7 +85,7 @@ class BescheidGrpcServiceITCase {
 			mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME);
 			mongoOperations.dropCollection(Vorgang.COLLECTION_NAME);
 			when(currentUserService.getUser()).thenReturn(callContextUser);
-			when(currentUserService.getUserProfile()).thenReturn(userProfile);
+			when(userProfileService.getUserProfile()).thenReturn(userProfile);
 		}
 
 		@Test
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java
index bdbcf04f6d8bb24fdfb319fdd45a57c0bcbf9835..5f4b31816e71ee49a910b7d74dcc126735063cd6 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/document/DocumentEventListenerITCase.java
@@ -30,22 +30,20 @@ import static org.mockito.Mockito.*;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
-import org.mockito.Mock;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
 import org.springframework.boot.test.mock.mockito.SpyBean;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.test.annotation.DirtiesContext;
 
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
-import de.ozgcloud.bescheid.common.callcontext.CallContextUser;
-import de.ozgcloud.bescheid.common.callcontext.CurrentUserService;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEvent;
 import de.ozgcloud.command.CommandFailedEvent;
@@ -53,6 +51,7 @@ import de.ozgcloud.common.test.DataITCase;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItem;
 import de.ozgcloud.vorgang.attached_item.VorgangAttachedItemTestFactory;
+import de.ozgcloud.vorgang.callcontext.CallContextAuthenticationTokenTestFactory;
 import de.ozgcloud.vorgang.command.CommandTestFactory;
 
 @SpringBootTest(classes = VorgangManagerServerApplication.class, properties = {
@@ -76,20 +75,20 @@ class DocumentEventListenerITCase {
 	@Autowired
 	private MongoOperations mongoOperations;
 
-	@MockBean
-	private CurrentUserService currentUserService;
-	@Mock
-	private CallContextUser callContextUser;
-
 	@Captor
 	private ArgumentCaptor<BescheidDocumentCreatedEvent> bescheidDocumentCreatedEventCaptor;
 	@Captor
 	private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor;
 
+	@AfterAll
+	static void cleanup() {
+		SecurityContextHolder.clearContext();
+	}
+
 	@BeforeEach
 	void init() {
+		SecurityContextHolder.getContext().setAuthentication(CallContextAuthenticationTokenTestFactory.create());
 		mongoOperations.dropCollection(VorgangAttachedItem.COLLECTION_NAME);
-		when(currentUserService.getUser()).thenReturn(callContextUser);
 	}
 
 	@Test
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java
index 5de6cb8db43331157cd66b2f84a1f00b859ddba1..2688640366bfcfc09504f2db123a0dfba3fa12dc 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/processor/ProcessorITCase.java
@@ -28,6 +28,7 @@ import de.ozgcloud.processor.vorgang.Vorgang;
 import de.ozgcloud.processor.vorgang.VorgangId;
 import de.ozgcloud.processor.vorgang.VorgangService;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
+import de.ozgcloud.vorgang.callcontext.WithMockCustomUser;
 import de.ozgcloud.vorgang.command.CommandService;
 import de.ozgcloud.vorgang.command.CreateCommandRequest;
 import de.ozgcloud.vorgang.command.PersistedCommand;
@@ -42,6 +43,7 @@ import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
 		"ozgcloud.command-manager.address=static://127.0.0.1:9091"
 }, classes = { VorgangManagerServerApplication.class })
 @ActiveProfiles({ "local", "itcase" })
+@WithMockCustomUser
 class ProcessorITCase {
 
 	@Autowired