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 a6315672327389de9cc133226f0debe77e2a228c..172138a213608eaf6ee332fbc2673281e784180e 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
@@ -129,6 +129,14 @@ public class VorgangService {
 		return vorgang.toBuilder().clearEingangs().eingang(eingang);
 	}
 
+	public String createVorgang(Vorgang vorgang) {
+		var mappedEingang = kopControlDataMapper.moveLabelsToControlData(vorgang.getEingangs().getFirst());
+		var modifiedBuilder = vorgang.toBuilder().id(null).version(0).inCreation(false).clearEingangs().eingang(mappedEingang).build();
+		var result = repository.save(modifiedBuilder);
+		publishVorgangeCreatedEvent(result);
+		return result.getId();
+	}
+
 	private void publishVorgangeCreatedEvent(Vorgang vorgang) {
 		publisher.publishEvent(new VorgangCreatedEvent(vorgang.getId()));
 	}
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java
index 216eb98e9acdd32f73761e69c40c489ffc10a07c..82b54fb91cf1cd94faaca488f313e3971a8f0504 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangServiceTest.java
@@ -290,6 +290,89 @@ class VorgangServiceTest {
 		}
 	}
 
+	@Nested
+	class TestCreateVorgang {
+
+		private static final Eingang EINGANG = EingangTestFactory.create();
+		private static final Vorgang SRC_VORGANG = VorgangTestFactory.createBuilder().clientAttributes(null).clearEingangs().eingang(EINGANG).build();
+		private static final String CREATED_VORGANG_ID = "created-vorgang-id";
+
+		@Mock
+		private Eingang mappedEingang;
+		@Mock
+		private Vorgang createdVorgang;
+
+		@Captor
+		private ArgumentCaptor<Vorgang> vorgangCaptor;
+		@Captor
+		private ArgumentCaptor<VorgangCreatedEvent> eventCaptor;
+
+		@BeforeEach
+		void init() {
+			when(kopControlDataMapper.moveLabelsToControlData(any(Eingang.class))).thenReturn(mappedEingang);
+			when(createdVorgang.getId()).thenReturn(CREATED_VORGANG_ID);
+			when(repository.save(any())).thenReturn(createdVorgang);
+		}
+
+		@Test
+		void shouldCallMoveLabels() {
+			createVorgang();
+
+			verify(kopControlDataMapper).moveLabelsToControlData(EINGANG);
+		}
+
+		@Test
+		void shouldResetIdBeforeSave() {
+			createVorgang();
+
+			verify(repository).save(vorgangCaptor.capture());
+			assertThat(vorgangCaptor.getValue().getId()).isNull();
+		}
+
+		@Test
+		void shouldResetVersionBeforeSave() {
+			createVorgang();
+
+			verify(repository).save(vorgangCaptor.capture());
+			assertThat(vorgangCaptor.getValue().getVersion()).isEqualTo(0);
+		}
+
+		@Test
+		void shouldSetInCreationFalse() {
+			createVorgang();
+
+			verify(repository).save(vorgangCaptor.capture());
+			assertThat(vorgangCaptor.getValue().isInCreation()).isFalse();
+		}
+
+		@Test
+		void shouldSetMappedEingang() {
+			createVorgang();
+
+			verify(repository).save(vorgangCaptor.capture());
+			assertThat(vorgangCaptor.getValue().getEingangs()).hasSize(1).first().isEqualTo(mappedEingang);
+		}
+
+		@Test
+		void shouldPublishVorgangCreatedEvent() {
+			createVorgang();
+
+			verify(publisher).publishEvent(eventCaptor.capture());
+			assertThat(eventCaptor.getValue().getSource()).isEqualTo(CREATED_VORGANG_ID);
+		}
+
+		@Test
+		void shouldReturnCreatedVorgangId() {
+			var result = createVorgang();
+
+			assertThat(result).isEqualTo(CREATED_VORGANG_ID);
+		}
+
+		private String createVorgang() {
+			return service.createVorgang(SRC_VORGANG);
+		}
+	}
+
 	@Nested
 	class TestVorgangNotFound {
 		@BeforeEach
@@ -346,7 +429,8 @@ class VorgangServiceTest {
 			void shouldThrowAccessDeniedException() {
 				when(vorgangAuthorizationService.authorizeByOrganisationseinheitenId(any(), any())).thenReturn(false);
 
-				assertThrows(AccessDeniedException.class, () -> service.getById(VorgangTestFactory.ID, FilterCriteriaTestFactory.create())); // NOSONAR
+				assertThrows(AccessDeniedException.class,
+						() -> service.getById(VorgangTestFactory.ID, FilterCriteriaTestFactory.create())); // NOSONAR
 			}
 		}
 
@@ -384,7 +468,7 @@ class VorgangServiceTest {
 	@Nested
 	class TestAssignToUser {
 
-		private Command command = CommandTestFactory.createBuilder().body(Map.of("assignedTo", "Klaus")).build();
+		private final Command command = CommandTestFactory.createBuilder().body(Map.of("assignedTo", "Klaus")).build();
 
 		@Test
 		void shouldCallRepository() {
@@ -418,8 +502,8 @@ class VorgangServiceTest {
 	@Nested
 	class TestDeleteVorgang {
 
-		private Vorgang vorgang = VorgangTestFactory.create();
-		private VorgangStub stub = VorgangStubTestFactory.create();
+		private final Vorgang vorgang = VorgangTestFactory.create();
+		private final VorgangStub stub = VorgangStubTestFactory.create();
 
 		@BeforeEach
 		void init() {