diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
index 27acb0c4ffd60cdf9acd3a905de168d91ac7417e..0f7d64c45be81fd4a74e0ccc903d3fd5a4a895d8 100644
--- a/bescheid-manager/pom.xml
+++ b/bescheid-manager/pom.xml
@@ -17,7 +17,7 @@
 	<properties>
 		<vorgang-manager.version>2.9.0</vorgang-manager.version>
 		<nachrichten-manager.version>2.9.0</nachrichten-manager.version>
-		<api-lib.version>0.10.0</api-lib.version>
+		<api-lib.version>0.11.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 49fbce9beef117e017788ae682323792bdb7478e..ce03da91e83577e2b9be664a9d8dbf9eb291ca48 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidEventListener.java
@@ -167,7 +167,7 @@ class BescheidEventListener {
 		if (SendBy.MANUAL.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) {
 			service.sendBescheidManually(bescheidItem, command.getRelationVersion());
 		} else if (SendBy.NACHRICHT.hasValue(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY))) {
-			service.sendBescheidPostfachMail(bescheidItem, command.getRelationVersion());
+			service.sendBescheidPostfachMail(bescheidItem, command);
 		} else {
 			throw new TechnicalException("Bescheid has unexpected sendBy value: '%s'. Allowed values are %s."
 					.formatted(bescheidItem.getItem().get(Bescheid.FIELD_SEND_BY),
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 ffc2ece833e690b658dd1689c38e5e28789d1689..3e358b16a88944b3a0f97f611e935c65396f03d8 100644
--- a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
+++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidService.java
@@ -1,5 +1,6 @@
 package de.ozgcloud.bescheid;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -9,9 +10,14 @@ import jakarta.annotation.PostConstruct;
 
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.info.BuildProperties;
 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.OzgCloudCreateSubCommandsRequest;
+import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.bescheid.attacheditem.AttachedItem;
 import de.ozgcloud.bescheid.attacheditem.AttachedItemService;
 import de.ozgcloud.bescheid.attributes.ClientAttributeService;
@@ -20,6 +26,7 @@ import de.ozgcloud.bescheid.nachricht.NachrichtService;
 import de.ozgcloud.bescheid.vorgang.Vorgang;
 import de.ozgcloud.bescheid.vorgang.VorgangId;
 import de.ozgcloud.bescheid.vorgang.VorgangService;
+import de.ozgcloud.command.Command;
 import de.ozgcloud.common.binaryfile.FileId;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.document.Document;
@@ -32,11 +39,16 @@ import lombok.extern.log4j.Log4j2;
 class BescheidService {
 
 	private static final String ERROR_MESSAGE_NO_SERVICE = "No Bescheid Endpoint is configured.";
+	static final String VORGANG_BESCHEIDEN_ORDER = "VORGANG_BESCHEIDEN";
+	static final String SUBCOMMANDS_EXECUTION_MODE = "PARALLEL";
 
 	private final VorgangService vorgangService;
 	private final AttachedItemService attachedItemService;
 	private final NachrichtService nachrichtService;
 	private final UserProfileService currentUserService;
+	@Qualifier("bescheid_OzgCloudCommandService")
+	private final OzgCloudCommandService commandService;
+	private final CommandMapper commandMapper;
 	private final ClientAttributeService bescheidClientAttributeService;
 	private final BuildProperties buildProperties;
 	private final Optional<BescheidRemoteService> remoteService;
@@ -72,9 +84,10 @@ class BescheidService {
 		}
 	}
 
-	public void sendBescheidManually(AttachedItem bescheidItem, long version) {
-		validateBescheidSendManually(bescheidItem, version);
-		setBescheidSent(bescheidItem);
+	public void sendBescheidManually(AttachedItem bescheidItem, Command parentCommand) {
+		validateBescheidSendManually(bescheidItem, parentCommand.getRelationVersion());
+		var subCommands = buildSendBescheidManuallySubCommands(bescheidItem);
+		setBescheidSent(bescheidItem, buildCreateSubCommandsRequest(parentCommand.getId(), subCommands));
 	}
 
 	void validateBescheidSendManually(AttachedItem bescheidItem, long version) {
@@ -85,11 +98,10 @@ class BescheidService {
 		}
 	}
 
-	public void sendBescheidPostfachMail(AttachedItem bescheidItem, long version) {
-		validateBescheidSendPostfach(bescheidItem, version);
-		var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId()));
-		setBescheidSent(bescheidItem);
-		nachrichtService.sendNachricht(buildBescheid(bescheidItem, vorgang.getServiceKonto()));
+	public void sendBescheidPostfachMail(AttachedItem bescheidItem, Command parentCommand) {
+		validateBescheidSendPostfach(bescheidItem, parentCommand.getRelationVersion());
+		var subCommands = buildSendBescheidPostfachMailSubCommands(bescheidItem);
+		setBescheidSent(bescheidItem, buildCreateSubCommandsRequest(parentCommand.getId(), subCommands));
 	}
 
 	public void validateBescheidSendPostfach(AttachedItem bescheidItem, long version) {
@@ -160,14 +172,34 @@ class BescheidService {
 		return Collections.emptyList();
 	}
 
-	void setBescheidSent(AttachedItem bescheidItem) {
-		attachedItemService.setBescheidSentStatus(bescheidItem.getId(), bescheidItem.getVersion());
-		try {
-			vorgangService.bescheiden(bescheidItem.getVorgangId());
-		} catch (Exception e) {
-			attachedItemService.revertBescheidSendStatus(bescheidItem.getId(), bescheidItem.getVersion());
-			throw e;
-		}
+	List<OzgCloudCommand> buildSendBescheidPostfachMailSubCommands(AttachedItem bescheidItem) {
+		var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId()));
+		var commands = new ArrayList<>(buildSendBescheidSubCommands(bescheidItem, vorgang));
+		commands.add(nachrichtService.buildSendBescheidCommand(buildBescheid(bescheidItem, vorgang.getServiceKonto())));
+		return Collections.unmodifiableList(commands);
+	}
+
+	List<OzgCloudCommand> buildSendBescheidManuallySubCommands(AttachedItem bescheidItem) {
+		var vorgang = vorgangService.getById(VorgangId.from(bescheidItem.getVorgangId()));
+		return buildSendBescheidSubCommands(bescheidItem, vorgang);
+	}
+
+	List<OzgCloudCommand> buildSendBescheidSubCommands(AttachedItem bescheidItem, Vorgang vorgang) {
+		return List.of(vorgangService.buildVorgangBescheidenCommand(vorgang),
+				attachedItemService.buildSetBescheidSentStatusCommand(bescheidItem.getId(), bescheidItem.getVersion()))
+	}
+
+	OzgCloudCreateSubCommandsRequest buildCreateSubCommandsRequest(String parentCommandId, List<OzgCloudCommand> subCommands) {
+		return OzgCloudCreateSubCommandsRequest.builder()
+				.parentId(parentCommandId)
+				.executionMode(SUBCOMMANDS_EXECUTION_MODE)
+				.completedIfSubsCompleted(true)
+				.subCommands(subCommands)
+				.build();
+	}
+
+	void setBescheidSent(AttachedItem bescheidItem, OzgCloudCreateSubCommandsRequest createSubCommandsRequest) {
+		commandService.addSubCommands(createSubCommandsRequest);
 		setAntragBewilligung(bescheidItem);
 	}
 
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 180d95031923d482c4f25f3f42f42ba0620b111d..daff3a71360a763bb8ef188d2875d1360684602f 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
@@ -317,6 +317,10 @@ public class AttachedItemService {
 		return itemMap;
 	}
 
+	public OzgCloudCommand buildSetBescheidSentStatusCommand(String bescheidId, long bescheidVersion) {
+		return buildPatchBescheidCommand(bescheidId, bescheidVersion, buildBescheidSentStatusBodyObject(bescheidId));
+	}
+
 	OzgCloudCommand buildPatchBescheidCommand(String bescheidId, long bescheidVersion, Map<String, Object> bodyObject) {
 		return OzgCloudCommand.builder()
 				.relationId(commandMapper.mapRelationId(bescheidId))
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 ce261151ddaa6d682521e59cfbb806c21c033656..8ccdfe96f684e643826e143b56636d42ac25f733 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
@@ -72,7 +72,7 @@ public class NachrichtService {
 		commandService.createAndWaitUntilDone(buildSendBescheidCommand(bescheid));
 	}
 
-	OzgCloudCommand buildSendBescheidCommand(Bescheid bescheid) {
+	public OzgCloudCommand buildSendBescheidCommand(Bescheid bescheid) {
 		return OzgCloudCommand.builder()
 				.vorgangId(commandMapper.toOzgCloudVorgangId(bescheid.getVorgangId().toString()))
 				.relationId(commandMapper.mapRelationId(bescheid.getVorgangId().toString()))
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 09b366285262b009acc54f131611760025ef1c5d..e185a33ad5af57e688bca5e214e8904fee509b1b 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
@@ -31,10 +31,14 @@ public class VorgangService {
 	}
 
 	private void bescheiden(Vorgang vorgang) {
-		commandService.createAndWaitUntilDone(buildBescheidenCommand(vorgang));
+		commandService.createAndWaitUntilDone(buildVorgangBescheidenCommand(vorgang));
 	}
 
-	OzgCloudCommand buildBescheidenCommand(Vorgang vorgang) {
+	public OzgCloudCommand buildVorgangBescheidenCommand(String vorgangId) {
+		return buildVorgangBescheidenCommand(getById(VorgangId.from(vorgangId)));
+	}
+
+	public OzgCloudCommand buildVorgangBescheidenCommand(Vorgang vorgang) {
 		return OzgCloudCommand.builder()
 				.vorgangId(commandMapper.toOzgCloudVorgangId(vorgang.getId().toString()))
 				.relationId(commandMapper.mapRelationId(vorgang.getId().toString()))
diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java
index 424a4330012bc1fd605dede82c56eac40c435f67..f40c75e0a785481253769d68b70295e2eef9f219 100644
--- a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java
+++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/vorgang/VorgangServiceTest.java
@@ -79,12 +79,12 @@ class VorgangServiceTest {
 		void shouldCallBuildBescheidenCommand() {
 			service.bescheiden(VorgangTestFactory.ID.toString());
 
-			verify(service).buildBescheidenCommand(VORGANG);
+			verify(service).buildVorgangBescheidenCommand(VORGANG);
 		}
 
 		@Test
 		void shouldCallCommandService() {
-			doReturn(ozgCloudCommand).when(service).buildBescheidenCommand(any());
+			doReturn(ozgCloudCommand).when(service).buildVorgangBescheidenCommand(any());
 
 			service.bescheiden(VorgangTestFactory.ID.toString());
 
@@ -99,7 +99,7 @@ class VorgangServiceTest {
 
 		@Test
 		void shouldCallCommandMapperToOzgCloudVorgangId() {
-			service.buildBescheidenCommand(VORGANG);
+			service.buildVorgangBescheidenCommand(VORGANG);
 
 			verify(commandMapper).toOzgCloudVorgangId(VorgangTestFactory.ID.toString());
 		}
@@ -109,14 +109,14 @@ class VorgangServiceTest {
 			var expectedId = OzgCloudVorgangId.from(VorgangTestFactory.ID.toString());
 			when(commandMapper.toOzgCloudVorgangId(any())).thenReturn(expectedId);
 
-			var result = service.buildBescheidenCommand(VORGANG);
+			var result = service.buildVorgangBescheidenCommand(VORGANG);
 
 			assertThat(result.getVorgangId()).isEqualTo(expectedId);
 		}
 
 		@Test
 		void shouldCallCommandMapperMapRelationId() {
-			service.buildBescheidenCommand(VORGANG);
+			service.buildVorgangBescheidenCommand(VORGANG);
 
 			verify(commandMapper).mapRelationId(VorgangTestFactory.ID.toString());
 		}
@@ -126,7 +126,7 @@ class VorgangServiceTest {
 			var expectedId = GenericId.from(VorgangTestFactory.ID.toString());
 			when(commandMapper.mapRelationId(any())).thenReturn(expectedId);
 
-			var result = service.buildBescheidenCommand(VORGANG);
+			var result = service.buildVorgangBescheidenCommand(VORGANG);
 
 			assertThat(result.getRelationId()).isEqualTo(expectedId);
 		}
@@ -135,7 +135,7 @@ class VorgangServiceTest {
 		void shouldSetRelationVersion() {
 			var expectedVersion = VORGANG.getVersion();
 
-			var result = service.buildBescheidenCommand(VORGANG);
+			var result = service.buildVorgangBescheidenCommand(VORGANG);
 
 			assertThat(result.getRelationVersion()).isEqualTo(expectedVersion);
 		}
@@ -144,7 +144,7 @@ class VorgangServiceTest {
 		void shouldSetOrder() {
 			var expectedOrder = VorgangService.VORGANG_BESCHEIDEN;
 
-			var result = service.buildBescheidenCommand(VORGANG);
+			var result = service.buildVorgangBescheidenCommand(VORGANG);
 
 			assertThat(result.getOrder()).isEqualTo(expectedOrder);
 		}
diff --git a/lombok.config b/lombok.config
index d07dd9b0e2b0281fbf514a968b9451cb6af62f93..a06fa130e8af26b659f2d3a0cb1114cd966a9b0e 100644
--- a/lombok.config
+++ b/lombok.config
@@ -27,4 +27,5 @@ lombok.log.slf4j.flagUsage = ERROR
 lombok.log.log4j.flagUsage = ERROR
 lombok.data.flagUsage = ERROR
 lombok.nonNull.exceptionType = IllegalArgumentException
-lombok.addLombokGeneratedAnnotation = true
\ No newline at end of file
+lombok.addLombokGeneratedAnnotation = true
+lombok.copyableAnnotations += org.springframework.beans.factory.annotation.Qualifier
\ No newline at end of file
diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml
index c1c9559cf51e63f7e9c0e53898afed11eaf4c05c..3776798e2d74025f9bb144d7d12a11e478138605 100644
--- a/vorgang-manager-server/pom.xml
+++ b/vorgang-manager-server/pom.xml
@@ -53,7 +53,7 @@
 		<zufi-manager-interface.version>1.0.0</zufi-manager-interface.version>
 
 		<user-manager-interface.version>2.1.0</user-manager-interface.version>
-		<bescheid-manager.version>1.14.1</bescheid-manager.version>
+		<bescheid-manager.version>1.15.0-SNAPSHOT</bescheid-manager.version>
 		<processor-manager.version>0.4.1</processor-manager.version>
 		<nachrichten-manager.version>2.9.0</nachrichten-manager.version>
 		<ozgcloud-starter.version>0.10.0</ozgcloud-starter.version>