diff --git a/pluto-command/src/main/java/de/itvsh/ozg/pluto/command/CommandExecutedEvent.java b/pluto-command/src/main/java/de/itvsh/ozg/pluto/command/CommandExecutedEvent.java
index 9a4a5c2419e1b0b7e62f601b4414c8c5539eb35d..70ea98930c6f3008ac00c8f277b04c2fee0337a3 100644
--- a/pluto-command/src/main/java/de/itvsh/ozg/pluto/command/CommandExecutedEvent.java
+++ b/pluto-command/src/main/java/de/itvsh/ozg/pluto/command/CommandExecutedEvent.java
@@ -29,12 +29,27 @@ public class CommandExecutedEvent extends ApplicationEvent {
 
 	private static final long serialVersionUID = 1L;
 
+	private final Command command;
+
+	@Deprecated
 	protected CommandExecutedEvent(String commandId) {
 		super(commandId);
+
+		command = null;
+	}
+
+	protected CommandExecutedEvent(Command command) {
+		super(command.getId());
+
+		this.command = command;
 	}
 
 	@Override
 	public String getSource() {
 		return (String) super.getSource();
 	}
+
+	public Command getCommand() {
+		return command;
+	}
 }
\ No newline at end of file
diff --git a/pluto-server/pom.xml b/pluto-server/pom.xml
index ee1b81450616b19997325e598cc9d64faef76ea0..e980babe2ce81cf110b3e03ca1039a316bf4b274 100644
--- a/pluto-server/pom.xml
+++ b/pluto-server/pom.xml
@@ -77,6 +77,11 @@
 			<artifactId>pluto-utils</artifactId>
 			<version>${project.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>de.itvsh.ozg.pluto</groupId>
+			<artifactId>pluto-command</artifactId>
+			<version>${project.version}</version>
+		</dependency>
 
 		<dependency>
 			<groupId>de.itvsh.kop.notification</groupId>
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandEventListener.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandEventListener.java
index 39655dd16a0e31abd128ad158900fe4d02cdff59..d22aeb044bdad08562ff570c044eec59d26272df 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandEventListener.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandEventListener.java
@@ -23,19 +23,43 @@
  */
 package de.itvsh.ozg.pluto.command;
 
+import java.util.Objects;
+import java.util.function.Predicate;
+
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 
+import lombok.extern.log4j.Log4j2;
+
 @Component
+@Log4j2
 public class CommandEventListener {
 
+	private static final String DELETION_ORDER = "VORGANG_LOESCHEN";
+
+	private static final Predicate<Command> IS_DELETION_COMMAND = command -> Objects.nonNull(command) &&
+			(StringUtils.equals(command.getOrder(), DELETION_ORDER));
+
 	@Autowired
 	private CommandService commandService;
 
 	@EventListener
 	public void setStatusFinished(CommandExecutedEvent event) {
 		commandService.setCommandFinished(event.getSource());
+
+		handleVorgangDeleted(event.getCommand());
+	}
+
+	void handleVorgangDeleted(Command command) {
+		if (IS_DELETION_COMMAND.test(command)) {
+			try {
+				commandService.deleteAllByVorgang(command.getVorgangId());
+			} catch (RuntimeException e) {
+				LOG.error("Error on deleting Commands of Vorgang " + command.getVorgangId(), e);
+			}
+		}
 	}
 
 	@EventListener
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandRepository.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandRepository.java
index 61ce4f9ac10434ed25b04653eeec04bb637760aa..6568052aa5b1931a0723ce84f6520468f13cf409 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandRepository.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandRepository.java
@@ -140,4 +140,8 @@ class CommandRepository {
 		}
 		return update;
 	}
+
+	public void deleteAllByVorgang(String vorgangId) {
+		mongoOperations.remove(query(where(PersistedCommand.FIELD_VORGANG_ID).is(vorgangId)), PersistedCommand.COLLECTION_NAME);
+	}
 }
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandService.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandService.java
index 7fd65a282305a9f6cab73ae432e65e85b9b791e8..28d84f431fe5114a45fb3c4f915e125bab60c6a2 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandService.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/command/CommandService.java
@@ -155,4 +155,8 @@ public class CommandService {
 	public void setPreviousState(String commandId, Map<String, Object> previousState) {
 		repository.patch(commandId, previousState);
 	}
+
+	public void deleteAllByVorgang(String vorgangId) {
+		repository.deleteAllByVorgang(vorgangId);
+	}
 }
\ No newline at end of file
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/search/SearchEventListener.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/search/SearchEventListener.java
index 5570f9620f1a5ec6e69d52c27454a185c26e71b4..c990d40b52afb4f5006346913fc9f04a6a69ad74 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/search/SearchEventListener.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/common/search/SearchEventListener.java
@@ -80,10 +80,11 @@ public class SearchEventListener {
 
 	@EventListener
 	public void onVorgangDeleted(VorgangDeletedEvent event) {
+		String vorgangId = event.getCommand().getVorgangId();
 		try {
-			searchService.deleteVorgang(event.getVorgangId());
+			searchService.deleteVorgang(vorgangId);
 		} catch (RuntimeException e) {
-			LOG.error("Error on deleting Vorgang (" + event.getVorgangId() + ") from search index.", e);
+			LOG.error("Error on deleting Vorgang (" + vorgangId + ") from search index.", e);
 		}
 	}
 
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangDeletedEvent.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangDeletedEvent.java
index e9ca562cdbff7fac09c07893a3c4d40c05e9e4a0..80d79bcacfdb5845c1c7ff59fb8b535383dda60c 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangDeletedEvent.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangDeletedEvent.java
@@ -1,17 +1,14 @@
 package de.itvsh.ozg.pluto.vorgang;
 
+import de.itvsh.ozg.pluto.command.Command;
 import de.itvsh.ozg.pluto.command.CommandExecutedEvent;
 import lombok.Getter;
 
 @Getter
 public class VorgangDeletedEvent extends CommandExecutedEvent {
 
-	private final String vorgangId;
-
-	protected VorgangDeletedEvent(String commandId, String vorgangId) {
-		super(commandId);
-
-		this.vorgangId = vorgangId;
+	protected VorgangDeletedEvent(Command command) {
+		super(command);
 	}
 
 }
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangEventListener.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangEventListener.java
index aca3865efd287c342cc383e8e7e2cebff76e26d9..ede095cbdcc9a7ae1c63b626220ed3bdbe966e9b 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangEventListener.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangEventListener.java
@@ -85,7 +85,7 @@ public class VorgangEventListener {
 			vorgangService.deleteVorgang(vorgangId);
 			fileService.deleteAllByVorgang(vorgangId);
 
-			publishEvent(new VorgangDeletedEvent(command.getId(), vorgangId));
+			publishEvent(new VorgangDeletedEvent(command));
 		} catch (RuntimeException e) {
 			LOG.error("Unexpected Error on deleting Vorgang.", e);
 			publisher.publishEvent(new CommandFailedEvent(command.getId(), e.getMessage()));
diff --git a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java
index 7a4ecceae5bfd74262683a010809c313ea2904c7..03c884b59c6304e4e31a3ad41e3acfdb2c46a131 100644
--- a/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java
+++ b/pluto-server/src/main/java/de/itvsh/ozg/pluto/vorgang/VorgangService.java
@@ -191,6 +191,7 @@ public class VorgangService {
 	}
 
 	public void deleteVorgang(String vorgangId) {
+//TODO check version
 		var stub = stubMapper.fromVorgang(loadById(vorgangId));
 
 		repository.saveStub(stub);
diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandEventListenerTest.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandEventListenerTest.java
index 1a95b88791ab52661b10c865aee0d75e68f39032..d21243d7dbcb2cfb112762d4e68ac2a328168f6b 100644
--- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandEventListenerTest.java
+++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandEventListenerTest.java
@@ -23,6 +23,8 @@
  */
 package de.itvsh.ozg.pluto.command;
 
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 import org.junit.jupiter.api.Nested;
@@ -30,6 +32,8 @@ import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
+import de.itvsh.ozg.pluto.vorgang.VorgangTestFactory;
+
 class CommandEventListenerTest {
 
 	@InjectMocks // NOSONAR
@@ -48,6 +52,33 @@ class CommandEventListenerTest {
 
 			verify(commandService).setCommandFinished(CommandTestFactory.ID);
 		}
+
+		@Nested
+		class HandleVorgangDelete {
+
+			@Test
+			void shouldIgnoreNull() {
+				assertThatCode(() -> listener.handleVorgangDeleted(null)).doesNotThrowAnyException();
+			}
+
+			@Test
+			void shouldDeleteCommandsOnVorgangDeletion() {
+				listener.handleVorgangDeleted(buildDeletionCommand());
+
+				verify(commandService).deleteAllByVorgang(VorgangTestFactory.ID);
+			}
+
+			@Test
+			void shouldHandleExcpetion() {
+				doThrow(RuntimeException.class).when(commandService).deleteAllByVorgang(any());
+
+				assertThatCode(() -> listener.handleVorgangDeleted(buildDeletionCommand())).doesNotThrowAnyException();
+			}
+
+			private Command buildDeletionCommand() {
+				return CommandTestFactory.createBuilder().order("VORGANG_LOESCHEN").build();
+			}
+		}
 	}
 
 	@Nested
diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandRepositoryITCase.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandRepositoryITCase.java
index b4f0356a181ea35ea8b3edae0f4ac553e9877060..d42ac8e3100bbe5ee626f8cce2b1844fd3caff82 100644
--- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandRepositoryITCase.java
+++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandRepositoryITCase.java
@@ -24,6 +24,7 @@
 package de.itvsh.ozg.pluto.command;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.springframework.data.mongodb.core.query.Query.*;
 
 import java.util.Collections;
 import java.util.Map;
@@ -39,6 +40,7 @@ import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.data.mongodb.core.query.Criteria;
 
 import de.itvsh.kop.common.test.DataITCase;
 import de.itvsh.ozg.pluto.vorgang.Vorgang;
@@ -196,7 +198,7 @@ class CommandRepositoryITCase {
 
 		@BeforeEach
 		void init() {
-			command = repository.save(command);
+			command = mongoOperations.save(command);
 		}
 
 		@Test
@@ -211,4 +213,25 @@ class CommandRepositoryITCase {
 							PREVIOUS_STATE_STATUS_VALUE);
 		}
 	}
+
+	@Nested
+	class TestDeleteAllByVorgang {
+		@Test
+		void shouldDeleteCommand() {
+			mongoOperations.save(CommandTestFactory.create());
+
+			repository.deleteAllByVorgang(VorgangTestFactory.ID);
+
+			assertThat(mongoOperations.count(query(new Criteria()), Command.COLLECTION_NAME)).isZero();
+		}
+
+		@Test
+		void shouldNotDeleteOther() {
+			mongoOperations.save(CommandTestFactory.create());
+
+			repository.deleteAllByVorgang("other");
+
+			assertThat(mongoOperations.count(query(new Criteria()), Command.COLLECTION_NAME)).isOne();
+		}
+	}
 }
\ No newline at end of file
diff --git a/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandServiceTest.java b/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandServiceTest.java
index a4b1a702240676102f2eb79912f1474eb403c211..08fb20daccfa923cb97ff9c27015ad62f6ad0e8d 100644
--- a/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandServiceTest.java
+++ b/pluto-server/src/test/java/de/itvsh/ozg/pluto/command/CommandServiceTest.java
@@ -309,4 +309,14 @@ class CommandServiceTest {
 			verify(repository).patch(anyString(), any());
 		}
 	}
+
+	@Nested
+	class TestDeleteAllByVorgang {
+		@Test
+		void shouldCallRepository() {
+			service.deleteAllByVorgang(VorgangTestFactory.ID);
+
+			verify(repository).deleteAllByVorgang(VorgangTestFactory.ID);
+		}
+	}
 }
\ No newline at end of file