diff --git a/api-lib-core/pom.xml b/api-lib-core/pom.xml
index 09c99aa535fd39e164adf5ab46765c903426964d..fbc5a67d512c6027728cb680388cf6ad8cbee3c1 100644
--- a/api-lib-core/pom.xml
+++ b/api-lib-core/pom.xml
@@ -11,11 +11,9 @@
 	<artifactId>api-lib-core</artifactId>
 
 	<properties>
-		<lombok.version>1.18.30</lombok.version>
-		<mapstruct.version>1.5.5.Final</mapstruct.version>
+		<lombok.version>1.18.34</lombok.version>
 		<!-- plugins -->
 		<maven-surefire-plugin.version>3.2.5</maven-surefire-plugin.version>
-		<maven-failsafe-plugin.version>3.2.5</maven-failsafe-plugin.version>
 		<jacoco.plugin.version>0.8.11</jacoco.plugin.version>
 	</properties>
 
@@ -50,9 +48,11 @@
 
 		<!--spring -->
 		<dependency>
+			<!-- FIXME letzte Version von dieser Dependency ist 2.15.0.RELEASE. -->
+			<!-- Kann es durch ein adneres Dependency ersetz werden? -->
 			<groupId>net.devh</groupId>
 			<artifactId>grpc-client-spring-boot-autoconfigure</artifactId>
-			<version>2.14.0.RELEASE</version>
+			<version>2.15.0.RELEASE</version>
 		</dependency>
 
 		<dependency>
@@ -155,7 +155,7 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-failsafe-plugin</artifactId>
-				<version>${maven-failsafe-plugin.version}</version>
+				<version>${failsafe-plugin.version}</version>
 				<configuration>
 					<argLine>
 						${surefire.jacoco.args}
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java
index a3a6af6ba7375e0ef74b9e6b208a120f3f160dab..6223653f6f0333fdb86e0374cec8c02ac42e602c 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/file/grpc/GrpcOzgCloudFileService.java
@@ -9,8 +9,6 @@ import java.util.concurrent.TimeoutException;
 import java.util.logging.Level;
 
 import org.apache.commons.io.IOUtils;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Service;
 
 import com.google.protobuf.ByteString;
 
@@ -40,8 +38,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.java.Log;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 
-@Service
-@ConditionalOnProperty("ozgcloud.file-manager.address")
 @RequiredArgsConstructor
 @Log
 public class GrpcOzgCloudFileService implements OzgCloudFileService {
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java
index 96a696ee9ce7847154863b1c39043a4d5a733440..5a57685451e9e4dba22c7f71370cd9e7370cefa8 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapper.java
@@ -23,31 +23,31 @@ import de.ozgcloud.vorgang.vorgang.GrpcVorgangQueryExpression.Builder;
 @Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, unmappedTargetPolicy = ReportingPolicy.WARN)
 public interface OzgCloudVorgangQueryMapper {
 
-	static final String FORM_ENGINE_NAME_PATH = "eingangs.header.formEngineName";
-	static final String STATUS_PATH = "status";
-	static final String ORGANISATIONS_EINHEIT_ID_PATH = "eingangs.zustaendigeStelle.organisationseinheitenId";
-	static final String AKTENZEICHEN_PATH = "aktenzeichen";
-	static final String FORM_ID_PATH = "eingangs.header.formId";
+	String FORM_ENGINE_NAME_PATH = "eingangs.header.formEngineName";
+	String STATUS_PATH = "status";
+	String ORGANISATIONS_EINHEIT_ID_PATH = "eingangs.zustaendigeStelle.organisationseinheitenId";
+	String AKTENZEICHEN_PATH = "aktenzeichen";
+	String FORM_ID_PATH = "eingangs.header.formId";
 
 	default GrpcQuery toGrpc(OzgCloudVorgangQuery ozgCloudVorgangQuery) {
-		var queryBuilder = mapPropertiesToQuery(ozgCloudVorgangQuery);
-
-		if (queryBuilder.getExpressionsList().isEmpty()) {
-			return ozgCloudVorgangQuery.getQuery().map(this::toQuery)
-					.orElseGet(GrpcQuery::getDefaultInstance);
-		}
+		return hasPropertyExpressions(ozgCloudVorgangQuery)
+				? mapAllToQuery(ozgCloudVorgangQuery)
+				: ozgCloudVorgangQuery.getQuery().map(this::toQuery).orElseGet(GrpcQuery::getDefaultInstance);
+	}
 
-		ozgCloudVorgangQuery.getQuery().map(this::toQuery).ifPresent(queryBuilder::setNestedQuery);
-		return queryBuilder.build();
+	default boolean hasPropertyExpressions(OzgCloudVorgangQuery query) {
+		return query.getAktenzeichen().isPresent() || query.getForm().isPresent() || query.getStatus().isPresent()
+				|| query.getOrganisationsEinheitId().isPresent();
 	}
 
-	default GrpcQuery.Builder mapPropertiesToQuery(OzgCloudVorgangQuery query) {
+	default GrpcQuery mapAllToQuery(OzgCloudVorgangQuery query) {
 		var queryBuilder = GrpcQuery.newBuilder().setLogicalOperator(GrpcLogicalOperator.AND);
 		query.getAktenzeichen().map(this::toAktenzeichenExpression).ifPresent(queryBuilder::addExpressions);
 		query.getForm().map(this::toFormExpressions).ifPresent(queryBuilder::addAllExpressions);
 		query.getStatus().map(this::toStatusExpression).ifPresent(queryBuilder::addExpressions);
 		query.getOrganisationsEinheitId().map(this::toOrganisationsEinheitIdExpression).ifPresent(queryBuilder::addExpressions);
-		return queryBuilder;
+		query.getQuery().map(this::toQuery).ifPresent(queryBuilder::setNestedQuery);
+		return queryBuilder.build();
 	}
 
 	default GrpcVorgangQueryExpression toAktenzeichenExpression(String aktenzeichen) {
@@ -72,24 +72,20 @@ public interface OzgCloudVorgangQueryMapper {
 	}
 
 	default Set<GrpcVorgangQueryExpression> toFormExpressions(FormIdentification formIdentification) {
-		var expressions = new HashSet<GrpcVorgangQueryExpression>(2);
-		Optional.ofNullable(formIdentification.getFormEngineName())
-				.map(this::toFormEngineNameExpression)
-				.ifPresent(expressions::add);
-		Optional.ofNullable(formIdentification.getFormId())
-				.map(this::toFormIdExpression)
-				.ifPresent(expressions::add);
+		var expressions = HashSet.<GrpcVorgangQueryExpression>newHashSet(2);
+		Optional.ofNullable(formIdentification.getFormEngineName()).map(this::toFormEngineNameExpression).ifPresent(expressions::add);
+		Optional.ofNullable(formIdentification.getFormId()).map(this::toFormIdExpression).ifPresent(expressions::add);
 		return Collections.unmodifiableSet(expressions);
 	}
 
-	private GrpcVorgangQueryExpression toFormEngineNameExpression(String formEngineName) {
+	default GrpcVorgangQueryExpression toFormEngineNameExpression(String formEngineName) {
 		return getEqualExpressionBuilder()
 				.setPath(FORM_ENGINE_NAME_PATH)
 				.setOperandStringValue(formEngineName)
 				.build();
 	}
 
-	private GrpcVorgangQueryExpression toFormIdExpression(String formId) {
+	default GrpcVorgangQueryExpression toFormIdExpression(String formId) {
 		return getEqualExpressionBuilder()
 				.setPath(FORM_ID_PATH)
 				.setOperandStringValue(formId)
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java
index bcdc22ee4286ea121954f3772080085a2d38279c..ead98a31352e6fffc49162d52da65ccce9a22699 100644
--- a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangQueryMapperTest.java
@@ -1,10 +1,10 @@
 package de.ozgcloud.apilib.vorgang.grpc;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
+import java.util.Collections;
 import java.util.Optional;
 import java.util.Set;
 
@@ -12,10 +12,12 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mapstruct.factory.Mappers;
+import org.mockito.Mock;
 import org.mockito.Spy;
 
 import de.ozgcloud.apilib.vorgang.FormIdentificationTestFactory;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery.FormIdentification;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQuery.Query;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangQueryTestFactory;
 import de.ozgcloud.apilib.vorgang.QueryTestFactory;
@@ -31,111 +33,132 @@ class OzgCloudVorgangQueryMapperTest {
 	@Nested
 	class TestToGrpc {
 
+		@Mock
+		private GrpcQuery grpcQuery;
+
 		@Test
-		void shouldCallMapProperetiesToQuery() {
-			var query = OzgCloudVorgangQueryTestFactory.create();
+		void shouldCallHasPropertyExpressions() {
+			var ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
 
-			mapper.toGrpc(query);
+			mapper.toGrpc(ozgCloudVorgangQuery);
 
-			verify(mapper).mapPropertiesToQuery(query);
+			verify(mapper).hasPropertyExpressions(ozgCloudVorgangQuery);
 		}
 
 		@Nested
-		class OnNoNestedQuery {
+		class TestHasPropertyExpressions {
 
-			private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.createBuilder()
-					.query(Optional.empty())
-					.build();
+			@BeforeEach
+			void init() {
+				doReturn(true).when(mapper).hasPropertyExpressions(any());
+			}
+
+			@Test
+			void shouldCallMapToQuery() {
+				var ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
 
-			private final GrpcQuery.Builder queryBuilder = GrpcQueryTestFactory.createBuilder();
+				mapper.toGrpc(ozgCloudVorgangQuery);
 
-			@BeforeEach
-			void mock() {
-				doReturn(queryBuilder).when(mapper).mapPropertiesToQuery(query);
+				verify(mapper).mapAllToQuery(ozgCloudVorgangQuery);
 			}
 
 			@Test
-			void shouldReturnBuiltQuery() {
-				var grpcQuery = mapper.toGrpc(query);
+			void shouldReturnResult() {
+				doReturn(grpcQuery).when(mapper).mapAllToQuery(any());
+
+				var result = mapper.toGrpc(OzgCloudVorgangQueryTestFactory.create());
 
-				assertThat(grpcQuery).usingRecursiveComparison().isEqualTo(GrpcQueryTestFactory.create());
+				assertThat(result).isSameAs(grpcQuery);
 			}
 		}
 
 		@Nested
-		class OnNoProperties {
-			private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.create();
+		class TestHasNoPropertyExpressions {
 
 			@BeforeEach
-			void mock() {
-				doReturn(queryBuilder).when(mapper).mapPropertiesToQuery(query);
+			void init() {
+				doReturn(false).when(mapper).hasPropertyExpressions(any());
 			}
 
-			private final GrpcQuery.Builder queryBuilder = GrpcQueryTestFactory.createBuilder()
-					.clearExpressions();
-
 			@Test
-			void shouldMapQueryToGrpcQuery() {
-				mapper.toGrpc(query);
+			void shouldCallToQuery() {
+				var ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
+
+				mapper.toGrpc(ozgCloudVorgangQuery);
 
 				verify(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
 			}
 
 			@Test
-			void shouldReturnMappedQuery() {
-				var mappedQuery = GrpcQueryTestFactory.create();
-				doReturn(mappedQuery).when(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
+			void shouldReturnResult() {
+				doReturn(grpcQuery).when(mapper).toQuery(any(Query.class));
 
-				var grpcQuery = mapper.toGrpc(query);
+				var result = mapper.toGrpc(OzgCloudVorgangQueryTestFactory.create());
 
-				assertThat(grpcQuery).isEqualTo(mappedQuery);
+				assertThat(result).isSameAs(grpcQuery);
+			}
+
+			@Test
+			void shouldReturnDefaultInstance() {
+				var ozgCloudQuery = OzgCloudVorgangQueryTestFactory.createBuilder().query(Optional.empty()).build();
+
+				var result = mapper.toGrpc(ozgCloudQuery);
+
+				assertThat(result).isEqualTo(GrpcQuery.getDefaultInstance());
 			}
 		}
+	}
 
-		@Nested
-		class OnNestedQueryAndProperties {
+	@Nested
+	class TestHasPropertyExpressions {
 
-			private final OzgCloudVorgangQuery query = OzgCloudVorgangQueryTestFactory.create();
+		@Test
+		void shouldReturnFalse() {
+			var query = OzgCloudVorgangQuery.builder().query(Optional.of(OzgCloudVorgangQueryTestFactory.QUERY)).build();
 
-			private final GrpcQuery.Builder queryBuilder = GrpcQueryTestFactory.createBuilder();
+			var result = mapper.hasPropertyExpressions(query);
 
-			@BeforeEach
-			void mock() {
-				doReturn(queryBuilder).when(mapper).mapPropertiesToQuery(query);
-			}
+			assertThat(result).isFalse();
+		}
+
+		@Nested
+		class TestOnPropertySet {
 
 			@Test
-			void shouldCallMapQuery() {
-				mapper.toGrpc(query);
+			void shouldReturnTrueWithAktenzeichen() {
+				var query = OzgCloudVorgangQuery.builder().aktenzeichen(Optional.of(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN)).build();
 
-				verify(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
+				var result = mapper.hasPropertyExpressions(query);
+
+				assertThat(result).isTrue();
 			}
 
 			@Test
-			void shouldReturnGrpcQuery() {
-				var nestedQuery = GrpcQueryTestFactory.create();
-				var expectedQuery = GrpcQueryTestFactory.createBuilder()
-						.setNestedQuery(nestedQuery)
-						.build();
-				doReturn(nestedQuery).when(mapper).toQuery(OzgCloudVorgangQueryTestFactory.QUERY);
+			void shouldReturnTrueWithOrganisationsEinheitId() {
+				var query = OzgCloudVorgangQuery.builder()
+						.organisationsEinheitId(Optional.of(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID)).build();
 
-				var grpcQuery = mapper.toGrpc(query);
+				var result = mapper.hasPropertyExpressions(query);
 
-				assertThat(grpcQuery).usingRecursiveComparison().isEqualTo(expectedQuery);
+				assertThat(result).isTrue();
 			}
 
-		}
+			@Test
+			void shouldReturnTrueWithForm() {
+				var query = OzgCloudVorgangQuery.builder().form(Optional.of(FormIdentificationTestFactory.create())).build();
 
-		@Nested
-		class OnEmptyQuery {
+				var result = mapper.hasPropertyExpressions(query);
 
-			private final OzgCloudVorgangQuery query = OzgCloudVorgangQuery.builder().build();
+				assertThat(result).isTrue();
+			}
 
 			@Test
-			void shouldMapToDefaultGrpcQuery() {
-				var grpcQuery = mapper.toGrpc(query);
+			void shouldReturnTrueWithStatus() {
+				var query = OzgCloudVorgangQuery.builder().status(Optional.of(OzgCloudVorgangQueryTestFactory.STATUS)).build();
+
+				var result = mapper.hasPropertyExpressions(query);
 
-				assertThat(grpcQuery).usingRecursiveComparison().isEqualTo(GrpcQuery.getDefaultInstance());
+				assertThat(result).isTrue();
 			}
 		}
 	}
@@ -154,7 +177,7 @@ class OzgCloudVorgangQueryMapperTest {
 
 			@Test
 			void shouldCallToAktenzeichenExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				verify(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
 			}
@@ -163,14 +186,14 @@ class OzgCloudVorgangQueryMapperTest {
 			void shouldSetAktenzeichenExpression() {
 				doReturn(aktenzeichenExpression).when(mapper).toAktenzeichenExpression(OzgCloudVorgangQueryTestFactory.AKTENZEICHEN);
 
-				var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				assertThat(queryBuidler.getExpressionsList()).contains(aktenzeichenExpression);
 			}
 
 			@Test
 			void shouldNotCallToAktenzeichenExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().aktenzeichen(Optional.empty()).build());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().aktenzeichen(Optional.empty()).build());
 
 				verify(mapper, never()).toAktenzeichenExpression(any());
 			}
@@ -187,7 +210,7 @@ class OzgCloudVorgangQueryMapperTest {
 
 			@Test
 			void shouldCallToOrganisationsEinheitIdExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				verify(mapper).toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
 			}
@@ -197,14 +220,14 @@ class OzgCloudVorgangQueryMapperTest {
 				doReturn(organisationsEinheitIdExpression).when(mapper)
 						.toOrganisationsEinheitIdExpression(OzgCloudVorgangQueryTestFactory.ORGANISATIONS_EINHEIT_ID);
 
-				var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				assertThat(queryBuidler.getExpressionsList()).contains(organisationsEinheitIdExpression);
 			}
 
 			@Test
 			void shouldNotCallToOrganisationsEinheitIdExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().organisationsEinheitId(Optional.empty()).build());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().organisationsEinheitId(Optional.empty()).build());
 
 				verify(mapper, never()).toOrganisationsEinheitIdExpression(any());
 			}
@@ -223,7 +246,7 @@ class OzgCloudVorgangQueryMapperTest {
 
 			@Test
 			void shouldCallToFormExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				verify(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
 			}
@@ -232,17 +255,27 @@ class OzgCloudVorgangQueryMapperTest {
 			void shouldSetFormExpression() {
 				doReturn(formExpressions).when(mapper).toFormExpressions(OzgCloudVorgangQueryTestFactory.FORM);
 
-				var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				assertThat(queryBuidler.getExpressionsList()).containsAll(formExpressions);
 			}
 
 			@Test
 			void shouldNotCallToFormExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().form(Optional.empty()).build());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().form(Optional.empty()).build());
 
 				verify(mapper, never()).toFormExpressions(any());
 			}
+
+			@Test
+			void shouldNotSetEmptyFormExpressions() {
+				doReturn(Collections.emptySet()).when(mapper).toFormExpressions(any());
+				var ozgCloudVorgangQuery = OzgCloudVorgangQuery.builder().form(Optional.of(FormIdentification.builder().build())).build();
+
+				var result = mapper.mapAllToQuery(ozgCloudVorgangQuery);
+
+				assertThat(result.getExpressionsList()).isEmpty();
+			}
 		}
 
 		@Nested
@@ -256,7 +289,7 @@ class OzgCloudVorgangQueryMapperTest {
 
 			@Test
 			void shouldCallToStatusExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				verify(mapper).toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
 			}
@@ -266,14 +299,14 @@ class OzgCloudVorgangQueryMapperTest {
 				doReturn(statusExpression).when(mapper)
 						.toStatusExpression(OzgCloudVorgangQueryTestFactory.STATUS);
 
-				var queryBuidler = mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.create());
+				var queryBuidler = mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.create());
 
 				assertThat(queryBuidler.getExpressionsList()).contains(statusExpression);
 			}
 
 			@Test
 			void shouldNotCallToStatusExpression() {
-				mapper.mapPropertiesToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().status(Optional.empty()).build());
+				mapper.mapAllToQuery(OzgCloudVorgangQueryTestFactory.createBuilder().status(Optional.empty()).build());
 
 				verify(mapper, never()).toStatusExpression(any());
 			}
@@ -335,47 +368,96 @@ class OzgCloudVorgangQueryMapperTest {
 	@Nested
 	class TestToFormExpressions {
 
-		private final GrpcVorgangQueryExpression formEngineNameExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
-				.setPath(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH)
-				.setOperator(GrpcQueryOperator.EQUAL)
-				.setOperandStringValue(FormIdentificationTestFactory.FORM_ENGINE_NAME)
-				.build();
+		@Mock
+		private GrpcVorgangQueryExpression formEngineNameExpression;
 
-		private final GrpcVorgangQueryExpression formIdExpression = GrpcVorgangQueryExpressionTestFactory.createBuilder()
-				.setPath(OzgCloudVorgangQueryMapper.FORM_ID_PATH)
-				.setOperator(GrpcQueryOperator.EQUAL)
-				.setOperandStringValue(FormIdentificationTestFactory.FORM_ID)
-				.build();
+		@Mock
+		private GrpcVorgangQueryExpression formIdExpression;
+
+		@Test
+		void shouldCallToFormEngineNameExpression() {
+			toFormExpressions();
+
+			verify(mapper).toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
+		}
+
+		@Test
+		void shouldSetFormEngineNameExpression() {
+			doReturn(formEngineNameExpression).when(mapper).toFormEngineNameExpression(any());
+
+			var expressions = toFormExpressions();
+
+			assertThat(expressions).contains(formEngineNameExpression);
+		}
 
 		@Test
-		void shouldReturnFormEngineNameExpression() {
-			var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.createBuilder().formId(null).build());
+		void shouldCallToFormIdExpression() {
+			toFormExpressions();
 
-			assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formEngineNameExpression);
+			verify(mapper).toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
 		}
 
 		@Test
 		void shouldReturnFormIdExpression() {
-			var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.createBuilder().formEngineName(null).build());
+			doReturn(formIdExpression).when(mapper).toFormIdExpression(any());
+
+			var expressions = toFormExpressions();
+
+			assertThat(expressions).contains(formIdExpression);
+		}
+
+		private Set<GrpcVorgangQueryExpression> toFormExpressions() {
+			return mapper.toFormExpressions(FormIdentificationTestFactory.create());
+		}
+	}
 
-			assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactly(formIdExpression);
+	@Nested
+	class TestToFormEngineNameExpression {
+
+		@Test
+		void shouldSetPath() {
+			var expression = mapper.toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
+
+			assertThat(expression.getPath()).isEqualTo(OzgCloudVorgangQueryMapper.FORM_ENGINE_NAME_PATH);
+		}
+
+		@Test
+		void shouldSetOperandStringValue() {
+			var expression = mapper.toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
+
+			assertThat(expression.getOperandStringValue()).isEqualTo(FormIdentificationTestFactory.FORM_ENGINE_NAME);
+		}
+
+		@Test
+		void shouldSetOperator() {
+			var expression = mapper.toFormEngineNameExpression(FormIdentificationTestFactory.FORM_ENGINE_NAME);
+
+			assertThat(expression.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL);
 		}
+	}
+
+	@Nested
+	class TestToFormIdExpression {
 
 		@Test
-		void shouldReturnBothExpressions() {
-			var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.create());
+		void shouldSetPath() {
+			var expression = mapper.toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
 
-			assertThat(expressions).usingRecursiveFieldByFieldElementComparator().containsExactlyInAnyOrder(formEngineNameExpression,
-					formIdExpression);
+			assertThat(expression.getPath()).isEqualTo(OzgCloudVorgangQueryMapper.FORM_ID_PATH);
 		}
 
 		@Test
-		void shouldReturnUnmodifiableSet() {
-			var newExpression = GrpcVorgangQueryExpressionTestFactory.create();
+		void shouldSetOperandStringValue() {
+			var expression = mapper.toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
+
+			assertThat(expression.getOperandStringValue()).isEqualTo(FormIdentificationTestFactory.FORM_ID);
+		}
 
-			var expressions = mapper.toFormExpressions(FormIdentificationTestFactory.create());
+		@Test
+		void shouldSetOperator() {
+			var expression = mapper.toFormIdExpression(FormIdentificationTestFactory.FORM_ID);
 
-			assertThrows(UnsupportedOperationException.class, () -> expressions.add(newExpression));
+			assertThat(expression.getOperator()).isEqualTo(GrpcQueryOperator.EQUAL);
 		}
 	}
 
diff --git a/ozg-cloud-spring-boot-starter/pom.xml b/ozg-cloud-spring-boot-starter/pom.xml
index 8a33f2d6c8bcc72a057fa5310a3f00ed9055868b..c6777f7504e28eb61e24ab1efbf17adc9d2951b6 100644
--- a/ozg-cloud-spring-boot-starter/pom.xml
+++ b/ozg-cloud-spring-boot-starter/pom.xml
@@ -56,6 +56,11 @@
 			<artifactId>lombok</artifactId>
 			<optional>true</optional>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-validation</artifactId>
+			<scope>test</scope>
+		</dependency>
 	</dependencies>
 
 
diff --git a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
index bf15fa70790994a26f3886f65701d80af4ab32cb..34de53db945841ebd5580d5e056fcb9a86375063 100644
--- a/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
+++ b/ozg-cloud-spring-boot-starter/src/main/java/de/ozgcloud/client/autoconfigure/OzgCloudClientAutoConfiguration.java
@@ -4,27 +4,26 @@ import java.util.Collection;
 import java.util.Map;
 
 import org.mapstruct.factory.Mappers;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Import;
 
 import de.ozgcloud.apilib.alfa.AlfaService;
 import de.ozgcloud.apilib.alfa.CommandAlfaService;
 import de.ozgcloud.apilib.alfa.dummy.DummyAlfaService;
 import de.ozgcloud.apilib.common.callcontext.DefaultOzgCloudCallContextProvider;
-import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor;
 import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
 import de.ozgcloud.apilib.common.command.OzgCloudCommandService;
 import de.ozgcloud.apilib.common.command.grpc.CommandMapper;
 import de.ozgcloud.apilib.common.command.grpc.GrpcOzgCloudCommandService;
-import de.ozgcloud.apilib.file.dummy.DummyOzgCloudFileService;
+import de.ozgcloud.apilib.file.OzgCloudFileService;
 import de.ozgcloud.apilib.file.grpc.GrpcOzgCloudFileService;
 import de.ozgcloud.apilib.file.grpc.OzgCloudFileMapper;
+import de.ozgcloud.apilib.user.GrpcOzgCloudUserProfileService;
+import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
 import de.ozgcloud.apilib.user.UserProfileMapper;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangIdMapper;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
@@ -33,20 +32,19 @@ import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService;
 import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangMapper;
 import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangQueryMapper;
 import de.ozgcloud.apilib.vorgang.grpc.OzgCloudVorgangStubMapper;
+import de.ozgcloud.user.grpc.userprofile.UserProfileServiceGrpc;
+import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc;
 import de.ozgcloud.vorgang.grpc.command.CommandServiceGrpc;
-import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub;
+import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc;
 import io.grpc.ManagedChannelBuilder;
+import lombok.RequiredArgsConstructor;
 import net.devh.boot.grpc.client.autoconfigure.GrpcClientAutoConfiguration;
 import net.devh.boot.grpc.client.config.GrpcChannelProperties;
 import net.devh.boot.grpc.client.config.GrpcChannelsProperties;
 
 @AutoConfiguration(before = GrpcClientAutoConfiguration.class)
 @ComponentScan("de.ozgcloud.client.autoconfigure")
-@Import({
-		GrpcOzgCloudFileService.class, DummyOzgCloudFileService.class,
-		OzgCloudCallContextAttachingInterceptor.class
-})
-
+@RequiredArgsConstructor
 public class OzgCloudClientAutoConfiguration {
 
 	private static final String CLIENT_NAME_VORGANG_MANAGER = "vorgang-manager";
@@ -54,14 +52,10 @@ public class OzgCloudClientAutoConfiguration {
 	private static final String CLIENT_NAME_COMMAND_MANAGER = "ozgcloud-command-manager";
 	private static final String CLIENT_NAME_USER_MANAGER = "ozgcloud-user-manager";
 
-	@Autowired
-	private OzgCloudVorgangManagerProperties vorgangManagerProperties;
-	@Autowired
-	private OzgCloudFileManagerProperties fileManagerProperties;
-	@Autowired
-	private OzgCloudCommandManagerProperties commandManagerProperties;
-	@Autowired
-	private OzgCloudUserManagerProperties userManagerProperties;
+	private final OzgCloudVorgangManagerProperties vorgangManagerProperties;
+	private final OzgCloudFileManagerProperties fileManagerProperties;
+	private final OzgCloudCommandManagerProperties commandManagerProperties;
+	private final OzgCloudUserManagerProperties userManagerProperties;
 
 	// @Bean
 	// @ConditionalOnProperty("ozgcloud.vorgang-manager.address")
@@ -99,7 +93,7 @@ public class OzgCloudClientAutoConfiguration {
 	@Bean
 	GrpcChannelsProperties clientProperties(Collection<GrpcChannelConfigurator> configurators) {
 		var properties = new GrpcChannelsProperties();
-		configurators.stream().forEach(configurator -> configurator.addToProperties(properties));
+		configurators.forEach(configurator -> configurator.addToProperties(properties));
 
 		return properties;
 	}
@@ -136,10 +130,11 @@ public class OzgCloudClientAutoConfiguration {
 
 	@Bean("ozgCloudVorgangService")
 	@ConditionalOnProperty("ozgcloud.vorgang-manager.address")
-	OzgCloudVorgangService grpcOzgCloudVorgangService(VorgangServiceBlockingStub vorgangServiceStub,
-			OzgCloudVorgangMapper mapper, OzgCloudVorgangStubMapper stubMapper, OzgCloudVorgangQueryMapper queryMapper,
-			OzgCloudCallContextProvider contextProvider) {
-
+	@ConditionalOnMissingBean(OzgCloudVorgangService.class)
+	OzgCloudVorgangService grpcOzgCloudVorgangService(OzgCloudVorgangMapper mapper, OzgCloudVorgangStubMapper stubMapper,
+		OzgCloudVorgangQueryMapper queryMapper, OzgCloudCallContextProvider contextProvider) {
+		var channel = ManagedChannelBuilder.forTarget(vorgangManagerProperties.getAddress()).usePlaintext().build();
+		var vorgangServiceStub = VorgangServiceGrpc.newBlockingStub(channel);
 		return new GrpcOzgCloudVorgangService(vorgangServiceStub, mapper, stubMapper, queryMapper, contextProvider);
 	}
 
@@ -210,13 +205,22 @@ public class OzgCloudClientAutoConfiguration {
 		return Mappers.getMapper(OzgCloudFileMapper.class);
 	}
 
-	// @Bean
-	// @ConditionalOnProperty("ozgcloud.user-manager.address")
-	// OzgCloudUserProfileService
-	// grpcOzgCloudUserProfileService(@GrpcClient("ozgcloud-user-manager")
-	// UserProfileServiceBlockingStub grpcStub,
-	// UserProfileMapper mapper) {
-	// System.out.println("#### building UM-ProfileService");
-	// return new GrpcOzgCloudUserProfileService(grpcStub, mapper);
-	// }
+	@Bean
+	@ConditionalOnMissingBean
+	@ConditionalOnProperty("ozgcloud.user-manager.address")
+	OzgCloudUserProfileService grpcOzgCloudUserProfileService(UserProfileMapper mapper, OzgCloudCallContextProvider contextProvider) {
+		var channel = ManagedChannelBuilder.forTarget(userManagerProperties.getAddress()).usePlaintext().build();
+		var userServiceStub = UserProfileServiceGrpc.newBlockingStub(channel);
+		return new GrpcOzgCloudUserProfileService(userServiceStub, mapper, contextProvider);
+	}
+
+	@Bean
+	@ConditionalOnProperty("ozgcloud.file-manager.address")
+	@ConditionalOnMissingBean
+	OzgCloudFileService grpcOzgCloudFileService(OzgCloudFileMapper mapper, OzgCloudCallContextProvider contextProvider) {
+		var channel = ManagedChannelBuilder.forTarget(fileManagerProperties.getAddress()).usePlaintext().build();
+		var blockingStub = BinaryFileServiceGrpc.newBlockingStub(channel);
+		var asyncStub = BinaryFileServiceGrpc.newStub(channel);
+		return new GrpcOzgCloudFileService(blockingStub, asyncStub, contextProvider, mapper);
+	}
 }
diff --git a/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..0581131a576eb0164e25074b68084a423d2808b7
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudFileServiceStarterITCase.java
@@ -0,0 +1,98 @@
+/*
+ * 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.client.autoconfigure;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Optional;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.annotation.DirtiesContext;
+
+import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
+import de.ozgcloud.apilib.file.OzgCloudFileService;
+import de.ozgcloud.apilib.file.dummy.DummyOzgCloudFileService;
+import de.ozgcloud.apilib.file.grpc.GrpcOzgCloudFileService;
+
+public class OzgCloudFileServiceStarterITCase {
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class)
+	@DirtiesContext()
+	class TestWithoutOzgCloudFileService {
+
+		@Autowired
+		private Optional<OzgCloudFileService> ozgCloudFileService;
+
+		@Test
+		void shouldStart() {
+			assertThat(ozgCloudFileService).isEmpty();
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
+		"ozgcloud.file-manager.address=address"
+	})
+	@DirtiesContext
+	class TestWithOzgCloudFileService {
+
+		@Autowired
+		private OzgCloudFileService ozgCloudFileService;
+
+		@Test
+		void shouldStart() {
+			assertThat(ozgCloudFileService).isInstanceOf(GrpcOzgCloudFileService.class);
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
+		"ozgcloud.file-manager.address=address"
+	})
+	@Import(TestWithExistingOzgCloudFileService.Config.class)
+	class TestWithExistingOzgCloudFileService {
+
+		@Autowired
+		private OzgCloudFileService ozgCloudFileService;
+
+		@Test
+		void shouldStart() { // NOSONAR
+			assertThat(ozgCloudFileService).isInstanceOf(DummyOzgCloudFileService.class);
+		}
+
+		static class Config {
+
+			@Bean
+			OzgCloudFileService ozgCloudFileService() {
+				return new DummyOzgCloudFileService();
+			}
+		}
+	}
+}
diff --git a/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudUserProfileServiceStarterITCase.java b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudUserProfileServiceStarterITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..a3b6aaf8d1a2daff89db50d6c6f2d457020e12e3
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudUserProfileServiceStarterITCase.java
@@ -0,0 +1,107 @@
+/*
+ * 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.client.autoconfigure;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.Optional;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Import;
+import org.springframework.test.annotation.DirtiesContext;
+
+import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
+import de.ozgcloud.apilib.user.GrpcOzgCloudUserProfileService;
+import de.ozgcloud.apilib.user.OzgCloudUserId;
+import de.ozgcloud.apilib.user.OzgCloudUserProfile;
+import de.ozgcloud.apilib.user.OzgCloudUserProfileService;
+
+public class OzgCloudUserProfileServiceStarterITCase {
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class)
+	@DirtiesContext()
+	class TestNoOzgCloudUserProfileService {
+
+		@Autowired
+		private Optional<OzgCloudUserProfileService> ozgCloudUserProfileService;
+
+		@Test
+		void shouldStart() {
+			assertThat(ozgCloudUserProfileService).isEmpty();
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
+		"ozgcloud.user-manager.address=address"
+	})
+	@DirtiesContext
+	class TestWithOzgCloudUserProfileService {
+
+		@Autowired
+		private OzgCloudUserProfileService ozgCloudUserProfileService;
+
+		@Test
+		void shouldStart() {
+			assertThat(ozgCloudUserProfileService).isInstanceOf(GrpcOzgCloudUserProfileService.class);
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
+		"ozgcloud.file-manager.address=address"
+	})
+	@Import(TestWithExistingOzgCloudFileService.Config.class)
+	class TestWithExistingOzgCloudFileService {
+
+		@Autowired
+		private OzgCloudUserProfileService ozgCloudUserProfileService;
+
+		@Test
+		void shouldStart() { // NOSONAR
+			assertThat(ozgCloudUserProfileService).isInstanceOf(DummyOzgCloudUserProfileService.class);
+		}
+
+		record DummyOzgCloudUserProfileService() implements OzgCloudUserProfileService {
+
+			@Override
+			public OzgCloudUserProfile getById(final OzgCloudUserId userId) {
+				return OzgCloudUserProfile.builder().build();
+			}
+		}
+
+		static class Config {
+
+			@Bean
+			OzgCloudUserProfileService zgCloudUserProfileService() {
+				return new DummyOzgCloudUserProfileService();
+			}
+		}
+	}
+}
diff --git a/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangServiceStarterITCase.java b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangServiceStarterITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..6618638e38515e2dbbc4424c66029aae7fed3f82
--- /dev/null
+++ b/ozg-cloud-spring-boot-starter/src/test/java/de/ozgcloud/client/autoconfigure/OzgCloudVorgangServiceStarterITCase.java
@@ -0,0 +1,68 @@
+/*
+ * 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.client.autoconfigure;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import de.ozgcloud.apilib.autoconfig.ApiLibTestApplication;
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
+import de.ozgcloud.apilib.vorgang.dummy.DummyVorgangService;
+import de.ozgcloud.apilib.vorgang.grpc.GrpcOzgCloudVorgangService;
+
+public class OzgCloudVorgangServiceStarterITCase {
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class, properties = {
+		"ozgcloud.vorgang-manager.address=address"
+	})
+	class TestWithOzgCloudVorgangService {
+
+		@Autowired
+		private OzgCloudVorgangService ozgCloudVorgangService;
+
+		@Test
+		void shouldStart() {
+			assertThat(ozgCloudVorgangService).isInstanceOf(GrpcOzgCloudVorgangService.class);
+		}
+	}
+
+	@Nested
+	@SpringBootTest(classes = ApiLibTestApplication.class)
+	class TestWithExistingOzgCloudVorgangService {
+
+		@Autowired
+		private OzgCloudVorgangService ozgCloudVorgangService;
+
+		@Test
+		void shouldStart() { // NOSONAR
+			assertThat(ozgCloudVorgangService).isInstanceOf(DummyVorgangService.class);
+		}
+
+	}
+}
diff --git a/pom.xml b/pom.xml
index 29f8833af80c7c03d28212f8921abbde86f300e9..87ba347588a5fbcc04fe68788a26787b14862cec 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.3.1</version>
+		<version>4.5.0-SNAPSHOT</version>
 		<relativePath /> <!-- lookup parent from repository -->
 	</parent>
 
@@ -25,10 +25,10 @@
 
 	<properties>
 		<source-plugin.version>3.3.0</source-plugin.version>
-		<failsafe-plugin.version>3.2.2</failsafe-plugin.version>
+		<failsafe-plugin.version>3.2.5</failsafe-plugin.version>
 		<maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
 
-		<vorgang-manager.version>2.11.0</vorgang-manager.version>
+		<vorgang-manager.version>2.17.0-SNAPSHOT</vorgang-manager.version>
 		<user-manager.version>2.1.0</user-manager.version>
 	</properties>