diff --git a/vorgang-manager-command/src/main/java/de/ozgcloud/command/VorgangLockedEvent.java b/vorgang-manager-command/src/main/java/de/ozgcloud/command/VorgangLockedEvent.java
new file mode 100644
index 0000000000000000000000000000000000000000..e7c08bc4538b8cc2bc93d1489a1609ab927dc0b9
--- /dev/null
+++ b/vorgang-manager-command/src/main/java/de/ozgcloud/command/VorgangLockedEvent.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.command;
+
+public class VorgangLockedEvent extends CommandExecutedEvent {
+
+	public VorgangLockedEvent(Command command) {
+		super(command);
+	}
+}
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/Order.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/Order.java
index 7bdcc47b4fc18edd75dc50802ecc6a8c3a7ca980..a48af6f57e82f77afb0ad312262c0367449d6f86 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/Order.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/command/Order.java
@@ -40,6 +40,7 @@ public enum Order {
 	VORGANG_WIEDEREROEFFNEN,
 	VORGANG_ZUM_LOESCHEN_MARKIEREN,
 	VORGANG_LOESCHEN,
+	VORGANG_LOCK,
 
 	ASSIGN_USER,
 
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangEventListener.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangEventListener.java
index 4433839167a3ecf15dfe1667f920e6d2b2a38757..d8d18d10a35f0af062a13f6163c2322e432c8cef 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangEventListener.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangEventListener.java
@@ -35,6 +35,8 @@ import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandCreatedEvent;
 import de.ozgcloud.command.CommandExecutedEvent;
 import de.ozgcloud.command.CommandFailedEvent;
+import de.ozgcloud.command.CommandRevokeFailedEvent;
+import de.ozgcloud.command.RevokeCommandEvent;
 import de.ozgcloud.vorgang.command.CommandService;
 import de.ozgcloud.vorgang.command.Order;
 import de.ozgcloud.vorgang.files.FileService;
@@ -54,6 +56,9 @@ public class VorgangEventListener {
 	public static final Predicate<Command> IS_LOESCHEN_COMMAND = command -> Order.VORGANG_LOESCHEN.isMeant(command.getOrder());
 	public static final Predicate<Command> IS_SET_AKTENZEICHEN_COMMAND = command -> Order.SET_AKTENZEICHEN.isMeant(command.getOrder());
 
+	private static final String IS_LOCK_VORGANG_COMMAND = "{T(de.ozgcloud.vorgang.vorgang.VorgangEventListener).IS_LOCK_VORGANG_ORDER.test(event.getSource())}";
+	public static final Predicate<Command> IS_LOCK_VORGANG_ORDER = command -> Order.VORGANG_LOCK.isMeant(command.getOrder());
+
 	@Autowired
 	private StatusService statusService;
 	@Autowired
@@ -111,6 +116,28 @@ public class VorgangEventListener {
 		}
 	}
 
+	@EventListener(condition = IS_LOCK_VORGANG_COMMAND)
+	public void onLockVorgang(CommandCreatedEvent event) {
+		var command = event.getSource();
+		try {
+			vorgangService.lockVorgang(command);
+		} catch (RuntimeException e) {
+			LOG.error("Error locking vorgang.", e);
+			publisher.publishEvent(new CommandFailedEvent(command.getId(), e.getMessage()));
+		}
+	}
+
+	@EventListener(condition = IS_LOCK_VORGANG_COMMAND)
+	public void onRevokeLockVorgang(RevokeCommandEvent event) {
+		var command = event.getSource();
+		try {
+			vorgangService.unlockVorgang(command);
+		} catch (RuntimeException e) {
+			LOG.error("Error unlocking vorgang.", e);
+			publisher.publishEvent(new CommandRevokeFailedEvent(command.getId(), e.getMessage()));
+		}
+	}
+
 	void publishEvent(CommandExecutedEvent event) {
 		LOG.debug("Command {} executed", event.getSource());
 		publisher.publishEvent(event);
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java
index 67678fb2648931db32733b0f3c113d43e0d87bc5..274e1945c40d174731604e4ab38dd291417d1e93 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangService.java
@@ -44,6 +44,7 @@ import org.springframework.validation.annotation.Validated;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.VorgangAssignedEvent;
 import de.ozgcloud.command.VorgangCreatedEvent;
+import de.ozgcloud.command.VorgangLockedEvent;
 import de.ozgcloud.vorgang.clientattribute.ClientAttributeMap;
 import de.ozgcloud.vorgang.clientattribute.ClientAttributeReadPermitted;
 import de.ozgcloud.vorgang.clientattribute.ClientAttributesMap;
@@ -223,4 +224,14 @@ public class VorgangService {
 	Vorgang loadById(String vorgangId) {
 		return repository.findById(vorgangId).orElseThrow(() -> new NotFoundException(Vorgang.class, vorgangId));
 	}
+
+	public void lockVorgang(Command command) {
+		publisher.publishEvent(new VorgangLockedEvent(command));
+	}
+
+	public void unlockVorgang(Command command) {
+		// TODO wird implementiert in OZG-6992
+		// publisher.publishEvent(new CommandRevokedEvent(command));
+		throw new UnsupportedOperationException("Not yet implemented");
+	}
 }
\ No newline at end of file
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangEventListenerTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangEventListenerTest.java
index 8b81f437d748490a869bf45321ea8e73c02856ed..1777bbfa47376f46a96918f6ef76721d0e68b0b3 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangEventListenerTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangEventListenerTest.java
@@ -46,6 +46,8 @@ import com.thedeanda.lorem.LoremIpsum;
 import de.ozgcloud.command.Command;
 import de.ozgcloud.command.CommandExecutedEvent;
 import de.ozgcloud.command.CommandFailedEvent;
+import de.ozgcloud.command.CommandRevokeFailedEvent;
+import de.ozgcloud.command.RevokeCommandEvent;
 import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.vorgang.command.CommandCreatedEventTestFactory;
 import de.ozgcloud.vorgang.command.CommandService;
@@ -231,4 +233,65 @@ class VorgangEventListenerTest {
 		}
 	}
 
+	@Nested
+	class TestLockVorgang {
+
+		@Captor
+		private ArgumentCaptor<CommandFailedEvent> eventCaptor;
+
+		@Test
+		void shouldCallLockVorgang() {
+			var command = CommandTestFactory.create();
+
+			listener.onLockVorgang(CommandCreatedEventTestFactory.create(command));
+
+			verify(service).lockVorgang(command);
+		}
+
+		@Test
+		void shouldPublishCommandFailedEvent() {
+			var command = CommandTestFactory.create();
+			var errorMessage = "error message";
+			doThrow(new RuntimeException(errorMessage)).when(service).lockVorgang(command);
+
+			listener.onLockVorgang(CommandCreatedEventTestFactory.create(command));
+
+			verify(publisher).publishEvent(eventCaptor.capture());
+			assertThat(eventCaptor.getValue()).satisfies(event -> {
+				assertThat(event.getSource()).isEqualTo(CommandTestFactory.ID);
+				assertThat(event.getErrorMessage()).isEqualTo(errorMessage);
+			});
+		}
+	}
+
+	@Nested
+	class TestRevokeLockVorgang {
+
+		@Captor
+		private ArgumentCaptor<CommandRevokeFailedEvent> eventCaptor;
+
+		@Test
+		void shouldCallUnlockVorgang() {
+			var command = CommandTestFactory.create();
+
+			listener.onRevokeLockVorgang(new RevokeCommandEvent(command));
+
+			verify(service).unlockVorgang(command);
+		}
+
+		@Test
+		void shouldPublishCommandFailedEvent() {
+			var command = CommandTestFactory.create();
+			var errorMessage = "error message";
+			doThrow(new RuntimeException(errorMessage)).when(service).unlockVorgang(command);
+
+			listener.onRevokeLockVorgang(new RevokeCommandEvent(command));
+
+			verify(publisher).publishEvent(eventCaptor.capture());
+			assertThat(eventCaptor.getValue()).satisfies(event -> {
+				assertThat(event.getSource()).isEqualTo(CommandTestFactory.ID);
+				assertThat(event.getErrorMessage()).isEqualTo(errorMessage);
+			});
+		}
+	}
 }
\ No newline at end of file