diff --git a/forwarder/pom.xml b/forwarder/pom.xml
index 8e11aac68cb31e2265202b09a8cef1a841d69293..c094433354d532b54e8d00623e939137184eebf8 100644
--- a/forwarder/pom.xml
+++ b/forwarder/pom.xml
@@ -86,6 +86,12 @@
 			<artifactId>lombok</artifactId>
 		</dependency>
 
+		<!-- Test -->
+		<dependency>
+			<groupId>de.ozgcloud.eingang</groupId>
+			<artifactId>common</artifactId>
+			<type>test-jar</type>
+		</dependency>
 	</dependencies>
 
 	<build>
diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java
index b52e416dd52104bc590d4e2f309fdc44660a93bb..3a36486c9255210293fa91e4c8ae7fa60a849f7f 100644
--- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java
+++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteria.java
@@ -34,5 +34,5 @@ public class RouteCriteria {
 
 	private Optional<String> gemeindeSchluessel;
 	private Optional<String> webserviceUrl;
-	private Optional<String> organisationseinheitenId;
+	private Optional<String> organisationEinheitId;
 }
diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java
index d82fbd76b46f70c91d4fb175a0c69d42e2b2fb9d..7fcb6cea6b4b70b8b785e331dfbf7ecb5d2f67ed 100644
--- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java
+++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteCriteriaMapper.java
@@ -27,12 +27,14 @@ import java.util.Optional;
 
 import org.apache.commons.lang3.StringUtils;
 import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
 
 import de.ozgcloud.eingang.forwarding.GrpcRouteCriteria;
 
 @Mapper
 interface RouteCriteriaMapper {
 
+	@Mapping(target = "organisationEinheitId", source = "organisationseinheitenId")
 	RouteCriteria fromGrpc(GrpcRouteCriteria grpcRouteCriteria);
 
 	default Optional<String> wrapWithOptional(String val) {
diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java
index fa9c9d99a6ccb8c303eba891c60770b89daf35ce..6827f8839442ed30148f26dc2f09926d42161d5a 100644
--- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java
+++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingGrpcService.java
@@ -23,24 +23,21 @@
  */
 package de.ozgcloud.eingang.forwarder;
 
-import org.springframework.beans.factory.annotation.Autowired;
-
 import de.ozgcloud.eingang.forwarding.GrpcRouteForwardingRequest;
 import de.ozgcloud.eingang.forwarding.GrpcRouteForwardingResponse;
 import de.ozgcloud.eingang.router.GrpcEingangMapper;
 import io.grpc.stub.StreamObserver;
+import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.server.service.GrpcService;
 
 @GrpcService
+@RequiredArgsConstructor
 public class RouteForwardingGrpcService extends RouteForwardingServiceGrpc.RouteForwardingServiceImplBase {
 
-	@Autowired
-	private RouteForwardingService service;
-	@Autowired
-	private RouteCriteriaMapper criteriaMapper;
+	private final RouteForwardingService service;
+	private final RouteCriteriaMapper criteriaMapper;
 
-	@Autowired
-	private GrpcEingangMapper eingangMapper;
+	private final GrpcEingangMapper eingangMapper;
 
 	@Override
 	public void routeForwarding(GrpcRouteForwardingRequest request, StreamObserver<GrpcRouteForwardingResponse> responseObserver) {
diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java
index 0079be1be32bbe6c4d23ba12f491acb126840c9f..8df1ca5ae4f4ea07eae7e718ad021ebc9582352c 100644
--- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java
+++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/RouteForwardingService.java
@@ -26,11 +26,23 @@ package de.ozgcloud.eingang.forwarder;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
+import de.ozgcloud.eingang.router.VorgangService;
+import lombok.RequiredArgsConstructor;
 
 @Service
+@RequiredArgsConstructor
 class RouteForwardingService {
 
+	private final VorgangService vorgangService;
+
 	public void route(RouteCriteria criteria, FormData formData) {
-//FIXME implement me
+		vorgangService.createVorgang(formData.toBuilder()
+				.clearZustaendigeStelles()
+				.zustaendigeStelle(ZustaendigeStelle.builder()
+						.organisationseinheitenId(criteria.getOrganisationEinheitId()
+								.orElseThrow(() -> new UnsupportedOperationException("OrganisationseinheitId is required!")))
+						.build())
+				.build());
 	}
 }
diff --git a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java
index f5b8c2742f66a3ac5119e5f1965e8751f3655c9b..82a9dc490effa49a4ca04da8e6b7d296f3da72d8 100644
--- a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java
+++ b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteCriteriaTestFactory.java
@@ -31,7 +31,7 @@ public class RouteCriteriaTestFactory {
 
 	public static final String GEMEINDE_SCHLUSSEL = "0815";
 	public static final String WEBSERVICE_URL = "http://nimmerland.by.kop-cloud.de/ws";
-	public static final String ORGANISATIONSEINHEITEN_ID = "4711";
+	public static final String ORGANISATION_EINHEIT_ID = "4711";
 
 	public static RouteCriteria create() {
 		return createBuilder().build();
@@ -41,7 +41,7 @@ public class RouteCriteriaTestFactory {
 		return RouteCriteria.builder()
 				.gemeindeSchluessel(Optional.of(GEMEINDE_SCHLUSSEL))
 				.webserviceUrl(Optional.of(WEBSERVICE_URL))
-				.organisationseinheitenId(Optional.of(ORGANISATIONSEINHEITEN_ID));
+				.organisationEinheitId(Optional.of(ORGANISATION_EINHEIT_ID));
 	}
 
 	public static GrpcRouteCriteria createGrpc() {
@@ -52,6 +52,6 @@ public class RouteCriteriaTestFactory {
 		return GrpcRouteCriteria.newBuilder()
 				.setGemeindeSchluessel(GEMEINDE_SCHLUSSEL)
 				.setWebserviceUrl(WEBSERVICE_URL)
-				.setOrganisationseinheitenId(ORGANISATIONSEINHEITEN_ID);
+				.setOrganisationseinheitenId(ORGANISATION_EINHEIT_ID);
 	}
 }
diff --git a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteForwardingServiceTest.java b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteForwardingServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e4c711fbc6b9ae53e3ff4b530541ee70d10418fa
--- /dev/null
+++ b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/RouteForwardingServiceTest.java
@@ -0,0 +1,66 @@
+package de.ozgcloud.eingang.forwarder;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.Optional;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+import de.ozgcloud.eingang.common.formdata.FormData;
+import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
+import de.ozgcloud.eingang.router.VorgangService;
+
+class RouteForwardingServiceTest {
+
+	@InjectMocks
+	private RouteForwardingService routeForwardingService;
+	@Mock
+	private VorgangService vorgangService;
+	@Captor
+	private ArgumentCaptor<FormData> formDataCaptor;
+
+	@Nested
+	class TestRoute {
+
+		private final FormData formData = FormDataTestFactory.create();
+
+		@Test
+		void shouldCallVorgangService() {
+			var criteria = RouteCriteriaTestFactory.create();
+
+			routeForwardingService.route(criteria, formData);
+
+			verify(vorgangService).createVorgang(formDataCaptor.capture());
+			assertThat(formDataCaptor.getValue()).usingRecursiveComparison().ignoringFields("zustaendigeStelles").isEqualTo(formData);
+		}
+
+		@Test
+		void shouldSetOrganisationEinheitIdInFormData() {
+			var criteria = RouteCriteriaTestFactory.create();
+			var expectedZustaendigeStelle = ZustaendigeStelle.builder()
+					.organisationseinheitenId(RouteCriteriaTestFactory.ORGANISATION_EINHEIT_ID)
+					.build();
+
+			routeForwardingService.route(criteria, formData);
+
+			verify(vorgangService).createVorgang(formDataCaptor.capture());
+			assertThat(formDataCaptor.getValue().getZustaendigeStelles()).usingRecursiveFieldByFieldElementComparator()
+					.containsExactly(expectedZustaendigeStelle);
+		}
+
+		@Test
+		void shouldThrowUnsupportedOperationException() {
+			var criteria = RouteCriteriaTestFactory.createBuilder().organisationEinheitId(Optional.empty()).build();
+
+			assertThrows(UnsupportedOperationException.class, () -> routeForwardingService.route(criteria, formData));
+		}
+	}
+}