diff --git a/src/main/java/de/ozgcloud/processor/processor/CommandProcessedEvent.java b/src/main/java/de/ozgcloud/processor/processor/CommandProcessedEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..1a6a2bd49a9cca3729dc29c32c31cfa6418de164
--- /dev/null
+++ b/src/main/java/de/ozgcloud/processor/processor/CommandProcessedEvent.java
@@ -0,0 +1,13 @@
+package de.ozgcloud.processor.processor;
+
+import de.itvsh.ozg.pluto.command.Command;
+import de.itvsh.ozg.pluto.command.CommandExecutedEvent;
+
+class CommandProcessedEvent extends CommandExecutedEvent {
+
+	private static final long serialVersionUID = 1L;
+
+	public CommandProcessedEvent(Command command) {
+		super(command);
+	}
+}
diff --git a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java
index 34a8f1c8875dfa01c2a3033ae84e5f86f6d20561..a5056754a9c4164f4e86bca353aea208fdb9f259 100644
--- a/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java
+++ b/src/main/java/de/ozgcloud/processor/processor/ProcessorEventListener.java
@@ -62,9 +62,10 @@ class ProcessorEventListener {
 	public void onCommandExecuteProcessor(CommandCreatedEvent event) {
 		var vorgang = getVorgang(event.getSource().getVorgangId());
 		processorService.processVorgang(vorgang, getProcessorNames(event.getSource())).forEach(processorResultMono -> processorResultMono
-				.doOnError(cause -> handleCommandError(cause, event.getSource().getId())).onErrorComplete()
+				.doOnError(cause -> publishCommandFailedEvent(cause, event.getSource().getId())).onErrorComplete()
 				.map(result -> addVorgangId(result, event.getSource().getVorgangId()))
 				.subscribe(resultService::processResult));
+		publishCommandProcessedEvent(event.getSource());
 	}
 	
 	private Vorgang getVorgang(String vorgangId) {
@@ -80,7 +81,11 @@ class ProcessorEventListener {
 		return result.toBuilder().vorgangId(VorgangId.from(vorgangId)).build();
 	}
 	
-	private void handleCommandError(Throwable e, String commandId) {
+	private void publishCommandFailedEvent(Throwable e, String commandId) {
 		publisher.publishEvent(new CommandFailedEvent(commandId, e.getMessage()));
 	}
+	
+	private void publishCommandProcessedEvent(Command command) {
+		publisher.publishEvent(new CommandProcessedEvent(command));
+	}
 }
\ No newline at end of file
diff --git a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java
index 4e8c098605d8314b0103c0a637fa2fb09fcb11d4..47553f7bc314796602317b36eafe69dcaebc5fee 100644
--- a/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java
+++ b/src/test/java/de/ozgcloud/processor/processor/ProcessorEventListenerTest.java
@@ -10,6 +10,7 @@ import java.util.Map;
 import java.util.stream.Stream;
 
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
@@ -126,6 +127,8 @@ class ProcessorEventListenerTest {
 		private Throwable exception;
 		@Captor
 		private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor;
+		@Captor
+		private ArgumentCaptor<CommandProcessedEvent> commandSuccessEventCaptor;
 		
 		private final Vorgang vorgang = VorgangTestFactory.create();
 		private final Collection<String> processorNames = List.of("dummy1", "dummy2");
@@ -153,7 +156,7 @@ class ProcessorEventListenerTest {
 		
 		@Test
 		@SneakyThrows
-		void shouldHandleCommandError() {
+		void shouldPublishCommandFailedEvent() {
 			var errorMsg = "ErrorMsg";
 			when(exception.getMessage()).thenReturn(errorMsg);
 			when(processorService.processVorgang(any(), any())).thenReturn(Stream.of(Mono.error(exception)));
@@ -165,5 +168,18 @@ class ProcessorEventListenerTest {
 			assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID);
 			assertThat(commandFailedEventCaptor.getValue().getErrorMessage()).isEqualTo(errorMsg);
 		}
+		
+		@Disabled
+		@Test
+		@SneakyThrows
+		void shouldPublishCommandProcessedEvent() {
+			when(processorService.processVorgang(any(), any())).thenReturn(Stream.empty());
+			
+			vorgangEventListener.onCommandExecuteProcessor(event);
+			
+			verify(publisher).publishEvent(commandSuccessEventCaptor.capture());
+			assertThat(commandFailedEventCaptor.getValue().getClass()).isEqualTo(CommandProcessedEvent.class);
+			assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(command);
+		}
 	}
 }
\ No newline at end of file