diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java
index 6ec01b6f79faee44c1cae7c9806ea4beede9416b..dd6cb3d0a4a8a31ae7aecc328658f9ab12f05b24 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/kommentar/KommentarModelAssembler.java
@@ -38,7 +38,6 @@ import de.ozgcloud.alfa.common.CollectionModelBuilder;
 import de.ozgcloud.alfa.common.ModelBuilder;
 import de.ozgcloud.alfa.common.binaryfile.BinaryFileController;
 import de.ozgcloud.alfa.kommentar.KommentarCommandController.KommentarCommandByVorgangController;
-import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 
@@ -67,7 +66,7 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
 		var attachmentsLink = linkTo(methodOn(KommentarController.class).getAttachments(kommentar.getId()));
 
 		return ModelBuilder.fromEntity(kommentar).addLink(selfLink.withSelfRel())
-				.ifMatch(() -> isEditable(vorgang))
+				.ifMatch(() -> vorgangController.isEditable(vorgang))
 				.addLink(commandLink.withRel(REL_EDIT))
 				.ifMatch(HAS_ATTACHMENTS)
 				.addLink(attachmentsLink.withRel(REL_ATTACHMENTS))
@@ -80,13 +79,9 @@ class KommentarModelAssembler implements RepresentationModelAssembler<Kommentar,
 		return CollectionModelBuilder.fromEntities(entities.map(kommentar -> buildModel(kommentar, vorgang)))
 				.addLink(linkTo(KommentarController.class).withSelfRel())
 				.addLink(linkTo(BinaryFileController.class).slash(vorgangId).slash("kommentarAttachment").slash("file").withRel(REL_UPLOAD_FILE))
-				.ifMatch(kommentareModel -> isEditable(vorgang))
+				.ifMatch(() -> vorgangController.isEditable(vorgang))
 				.addLink(linkTo(methodOn(KommentarCommandByVorgangController.class).createKommentar(null, vorgangId))
 						.withRel(REL_CREATE))
 				.buildModel();
 	}
-
-	private boolean isEditable(VorgangWithEingang vorgang) {
-		return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN;
-	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java
index 8d23095292dea0d30595fcdde1a13e3191e61d28..a78a8557ccbc84d841fe54e826d46631ed0b9dc7 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangController.java
@@ -213,4 +213,8 @@ public class VorgangController {
 
 		return handleGetAllRequest(requestCriteria);
 	}
+
+	public boolean isEditable(VorgangWithEingang vorgang) {
+		return vorgangService.isEditable(vorgang);
+	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java
index 61c4f75e230452f02dc4475e8790c172b4803b19..c85203151d23b98260e8b4c43c8659e3d7279b68 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/VorgangService.java
@@ -97,4 +97,8 @@ class VorgangService {
 	private Collection<String> getOrganisationseinheitenIdsFromUser() {
 		return userService.getUser().getOrganisationseinheitIds();
 	}
+
+	public boolean isEditable(VorgangWithEingang vorgang) {
+		return vorgang.getStatus() != VorgangStatus.ZU_LOESCHEN && (vorgang.getHeader() == null || !vorgang.getHeader().isLocked());
+	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java
index 21ec0ed833dc64a2ef0a4995c7940d07b497b6b8..e5bedc8eac2d93aa7ac9a76879c2f1ea945f97e5 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/kommentar/KommentarModelAssemblerTest.java
@@ -43,9 +43,9 @@ import org.springframework.hateoas.server.EntityLinks;
 
 import de.ozgcloud.alfa.common.UserProfileUrlProvider;
 import de.ozgcloud.alfa.common.UserProfileUrlProviderTestFactory;
-import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
 import de.ozgcloud.alfa.vorgang.VorgangController;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+import de.ozgcloud.alfa.vorgang.VorgangWithEingang;
 import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory;
 
 class KommentarModelAssemblerTest {
@@ -90,11 +90,13 @@ class KommentarModelAssemblerTest {
 
 	@Nested
 	class TestLinksOnModel {
-		final String COMMAND_BY_KOMMENTAR_PATH = //
+		private static final String COMMAND_BY_KOMMENTAR_PATH = //
 				KommentarCommandController.KOMMENTAR_COMMANDS
 						.replace("{kommentarId}", KommentarTestFactory.ID)
 						.replace("{kommentarVersion}", String.valueOf(KommentarTestFactory.VERSION));
 
+		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
+
 		@Test
 		void shouldHaveSelfLink() {
 			var link = buildModel().getLink(IanaLinkRelations.SELF);
@@ -105,6 +107,8 @@ class KommentarModelAssemblerTest {
 
 		@Test
 		void shouldHaveEditLink() {
+			when(vorgangController.isEditable(vorgang)).thenReturn(true);
+
 			var model = buildModel();
 
 			assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isPresent().get().extracting(Link::getHref)
@@ -113,9 +117,9 @@ class KommentarModelAssemblerTest {
 
 		@Test
 		void shouldNotHaveEditLink() {
-			var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build();
+			when(vorgangController.isEditable(vorgang)).thenReturn(false);
 
-			var model = modelAssembler.buildModel(KommentarTestFactory.create(), vorgang);
+			var model = buildModel();
 
 			assertThat(model.getLink(KommentarModelAssembler.REL_EDIT)).isEmpty();
 		}
@@ -149,7 +153,7 @@ class KommentarModelAssemblerTest {
 		}
 
 		EntityModel<Kommentar> buildModel() {
-			return modelAssembler.buildModel(KommentarTestFactory.create(), VorgangWithEingangTestFactory.create());
+			return modelAssembler.buildModel(KommentarTestFactory.create(), vorgang);
 		}
 	}
 
@@ -157,10 +161,11 @@ class KommentarModelAssemblerTest {
 	class TestLinksOnCollectionModel {
 
 		private final UserProfileUrlProvider urlProvider = new UserProfileUrlProvider();
+		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
 
 		@BeforeEach
 		void beforeEach() {
-			when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(VorgangWithEingangTestFactory.create());
+			when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang);
 		}
 
 		@Test
@@ -187,6 +192,7 @@ class KommentarModelAssemblerTest {
 		@Test
 		void shouldHaveCreateKommentarLink() {
 			initUserProfileUrlProvider(urlProvider);
+			when(vorgangController.isEditable(vorgang)).thenReturn(true);
 
 			var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(),
 					VorgangHeaderTestFactory.ID);
@@ -201,8 +207,7 @@ class KommentarModelAssemblerTest {
 		@Test
 		void shouldNotHaveCreateKommentarLink() {
 			initUserProfileUrlProvider(urlProvider);
-			var vorgang = VorgangWithEingangTestFactory.createBuilder().status(VorgangStatus.ZU_LOESCHEN).build();
-			when(vorgangController.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang);
+			when(vorgangController.isEditable(vorgang)).thenReturn(false);
 
 			var collectionModel = modelAssembler.toCollectionModel(Collections.singleton(KommentarTestFactory.create()).stream(),
 					VorgangHeaderTestFactory.ID);
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java
index 4c237346f037043fb98cf7c8c49a3a72b8e65bfd..21077182204efb4f4d68590f22751ae19141df72 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangControllerTest.java
@@ -901,4 +901,27 @@ class VorgangControllerTest {
 							.content(body));
 		}
 	}
+
+	@Nested
+	class TestIsEditable {
+
+		private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create();
+
+		@Test
+		void shouldCallService() {
+			controller.isEditable(vorgang);
+
+			verify(vorgangService).isEditable(vorgang);
+		}
+
+		@ParameterizedTest
+		@ValueSource(booleans = {true, false})
+		void shouldReturnServiceResult(boolean serviceResult) {
+			when(vorgangService.isEditable(vorgang)).thenReturn(serviceResult);
+
+			var editable = controller.isEditable(vorgang);
+
+			assertThat(editable).isEqualTo(serviceResult);
+		}
+	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java
index ee9788983ebb3355a4df0706ea42d46aabe385cc..e1b2ad1d5df534a5b3e6db19d749aa467f14f32c 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/VorgangServiceTest.java
@@ -33,6 +33,8 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.EnumSource;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
@@ -332,4 +334,59 @@ class VorgangServiceTest {
 			verify(service).buildFilterCriteria(any(FilterCriteria.class));
 		}
 	}
+
+	@Nested
+	class TestIsEditable {
+
+		@ParameterizedTest
+		@EnumSource
+		void shouldBeFalseWhenVorgangIsLocked(VorgangStatus status) {
+			var vorgang = VorgangWithEingangTestFactory.createBuilder()
+					.header(VorgangHeadTestFactory.createBuilder().locked(true).build())
+					.status(status)
+					.build();
+
+			var editable = service.isEditable(vorgang);
+
+			assertThat(editable).isFalse();
+		}
+
+		@Test
+		void shouldBeFalseWhenVorgangZuLoeschen() {
+			var vorgang = VorgangWithEingangTestFactory.createBuilder()
+					.header(VorgangHeadTestFactory.createBuilder().locked(false).build())
+					.status(VorgangStatus.ZU_LOESCHEN)
+					.build();
+
+			var editable = service.isEditable(vorgang);
+
+			assertThat(editable).isFalse();
+		}
+
+		@ParameterizedTest
+		@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ZU_LOESCHEN")
+		void shouldBeTrueWhenVorgangIsNotZuLoeschen(VorgangStatus status) {
+			var vorgang = VorgangWithEingangTestFactory.createBuilder()
+					.header(VorgangHeadTestFactory.createBuilder().locked(false).build())
+					.status(status)
+					.build();
+
+			var editable = service.isEditable(vorgang);
+
+			assertThat(editable).isTrue();
+		}
+
+		@ParameterizedTest
+		@EnumSource(mode = EnumSource.Mode.EXCLUDE, names = "ZU_LOESCHEN")
+		void shouldBeTrueIfHeaderIsNull(VorgangStatus status) {
+			var vorgang = VorgangWithEingangTestFactory.createBuilder()
+					.header(null)
+					.status(status)
+					.build();
+
+			var editable = service.isEditable(vorgang);
+
+			assertThat(editable).isTrue();
+		}
+	}
 }
\ No newline at end of file