diff --git a/Jenkinsfile b/Jenkinsfile
index 9158e620db755d16f6ec99bf7c7da69690ba4d48..f39af07714222e3561ef798cb1edf0e1a511ab82 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -79,28 +79,6 @@ pipeline {
                 }
             }
         }
-        
-        stage ('OWASP Dependency-Check Vulnerabilities') {
-            when {
-                anyOf {
-                    branch 'master'
-                    branch 'release'
-                }
-            }
-            steps {
-                    dependencyCheck additionalArguments: ''' 
-                        -o "./" 
-                        -s "./"
-                        -f "ALL" 
-                        -d /dependency-check-data
-                        --suppression dependency-check-supressions.xml
-                        --disableKnownExploited
-                        --disableArchive
-                        --prettyPrint''', odcInstallation: 'dependency-check-owasp'
-
-                    dependencyCheckPublisher pattern: 'dependency-check-report.xml'
-            }
-        }
 
         stage('Deploy Eingang-Adapter to Nexus'){
             when {
@@ -155,7 +133,7 @@ pipeline {
                     dir('src/main/helm') {
                         sh "helm lint -f test-values.yaml"
 
-                        sh "helm unittest -f '../../test/helm/*.yaml' -v '../../test/unit-values.yaml' ."
+                        sh "helm unittest --helm3 -f '../../test/helm/*.yaml' -v '../../test/unit-values.yaml' ."
 
                         sh "helm package --version=${HELM_CHART_VERSION} ."
 
@@ -174,7 +152,7 @@ pipeline {
                     dir('xta-adapter/src/main/helm') {
                         sh "helm lint -f test-values.yaml"
 
-                        sh "helm unittest -f '../../test/helm/*.yaml' -v '../../test/helm/values/unit-values.yaml' ."
+                        sh "helm unittest --helm3 -f '../../test/helm/*.yaml' -v '../../test/helm/values/unit-values.yaml' ."
 
                         sh "helm package --version=${HELM_CHART_VERSION} ."
 
@@ -217,6 +195,28 @@ pipeline {
                 }
             }
         }
+
+        stage ('OWASP Dependency-Check Vulnerabilities') {
+            when {
+                anyOf {
+                    branch 'master'
+                    branch 'release'
+                }
+            }
+            steps {
+                    dependencyCheck additionalArguments: ''' 
+                        -o "./" 
+                        -s "./"
+                        -f "ALL" 
+                        -d /dependency-check-data
+                        --suppression dependency-check-supressions.xml
+                        --disableKnownExploited
+                        --disableArchive
+                        --prettyPrint''', odcInstallation: 'dependency-check-owasp'
+
+                    dependencyCheckPublisher pattern: 'dependency-check-report.xml'
+            }
+        }
     }
     post {
         failure {
diff --git a/common/pom.xml b/common/pom.xml
index fcd679a43f6f3f22d5469f1d2ee94955056d14a7..665d5c50dd4658fb69110588bc17c56581cea0c7 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -31,7 +31,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 	<artifactId>common</artifactId>
diff --git a/formcycle-adapter/formcycle-adapter-impl/pom.xml b/formcycle-adapter/formcycle-adapter-impl/pom.xml
index 7e68ae9cccba4b10f15ff830ecdd33dcb930dafc..3780ceaf98ab22897aca467c2ad90c48ca558eb1 100644
--- a/formcycle-adapter/formcycle-adapter-impl/pom.xml
+++ b/formcycle-adapter/formcycle-adapter-impl/pom.xml
@@ -29,7 +29,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>formcycle-adapter</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>formcycle-adapter-impl</artifactId>
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/FormDataController.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/FormDataController.java
index 1f12b52ffe4efc2b1f4731ff88181b2968759f32..1702267a0ca19cf37ef769e1d6c2a41394bbe643 100644
--- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/FormDataController.java
+++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/FormDataController.java
@@ -65,6 +65,7 @@ class FormDataController {
 
 	private final FormCycleFormDataMapper mapper;
 	private final SemantikAdapter semantikAdapter;
+	private final VorgangNummerSupplier vorgangNummerSupplier;
 
 	@PostMapping(consumes = "multipart/form-data", produces = "application/protobuf")
 	public FormCycleConfirmationResponse receiveFormData(@RequestPart FormCycleFormData formData,
@@ -75,10 +76,16 @@ class FormDataController {
 		mappedFormData = addRepresentations(representations, mappedFormData);
 		mappedFormData = addFiles(formData, attachments, mappedFormData);
 		mappedFormData = addServiceKonto(formData, mappedFormData);
+		mappedFormData = addVorgangNummer(mappedFormData);
 
 		semantikAdapter.processFormData(mappedFormData);
 
-		return FormCycleConfirmationResponse.newBuilder().setVorgangNummer("TODO FILL ME").build();
+		return FormCycleConfirmationResponse.newBuilder().setVorgangNummer(mappedFormData.getHeader().getRequestId()).build();
+	}
+
+	private FormData addVorgangNummer(FormData mappedFormData) {
+		var formDataHeader = mappedFormData.getHeader().toBuilder().requestId(vorgangNummerSupplier.get()).build();
+		return mappedFormData.toBuilder().header(formDataHeader).build();
 	}
 
 	private FormData addRepresentations(Optional<Collection<MultipartFile>> files, FormData mappedFormData) {
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/VorgangNummerSupplier.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/VorgangNummerSupplier.java
new file mode 100644
index 0000000000000000000000000000000000000000..cebe8c74bb4d6fe3fa94035b24eb5caf0818c57d
--- /dev/null
+++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/itvsh/kop/eingang/formcycle/VorgangNummerSupplier.java
@@ -0,0 +1,32 @@
+package de.itvsh.kop.eingang.formcycle;
+
+import java.time.Instant;
+import java.time.LocalDate;
+
+import org.springframework.stereotype.Component;
+
+@Component
+class VorgangNummerSupplier {
+
+	static final String BASE30_ALPHABET = "23456789ABCDEFGHJKMNPQRSTVWXYZ";
+	static final int SUFFIX_LENGTH = 6;
+
+	public String get() {
+		var resultBuilder = initWithPrefix();
+		long currentTimeSeconds = Instant.now().toEpochMilli();
+		for (int i = 0; i < SUFFIX_LENGTH; i++) {
+			resultBuilder.append(BASE30_ALPHABET.charAt((int) currentTimeSeconds % 30));
+			currentTimeSeconds /= 30;
+		}
+		return resultBuilder.toString();
+	}
+
+	StringBuilder initWithPrefix() {
+		var today = LocalDate.now();
+		var lastYearNumber = today.getYear() % 10;
+		var monthValue = "%02d".formatted(today.getMonthValue());
+		var dayValue = "%02d".formatted(today.getDayOfMonth());
+		return new StringBuilder().append(lastYearNumber).append(monthValue).append(dayValue).append("-");
+	}
+
+}
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/FormDataControllerTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/FormDataControllerTest.java
index d5bb079c7c955bc8601e83cd5bb074fe901e511b..4c496eb5cd37d49195bfda49d00a24a09c00a1f2 100644
--- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/FormDataControllerTest.java
+++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/FormDataControllerTest.java
@@ -68,6 +68,8 @@ class FormDataControllerTest {
 	private FormCycleFormDataMapper mapper;
 	@Mock
 	private SemantikAdapter semantikAdapter;
+	@Mock
+	private VorgangNummerSupplier vorgangNummerSupplier;
 
 	private MockMvc mockMvc;
 
@@ -81,6 +83,8 @@ class FormDataControllerTest {
 	@Nested
 	class ReceiveFormData {
 
+		static final String VORGANG_NUMMER = "VorgangNummer";
+
 		private FormData mappedFormData = FormDataTestFactory.create();
 
 		@Captor
@@ -89,6 +93,7 @@ class FormDataControllerTest {
 		@BeforeEach
 		void init() {
 			when(mapper.toFormData(any())).thenReturn(mappedFormData);
+			when(vorgangNummerSupplier.get()).thenReturn(VORGANG_NUMMER);
 		}
 
 		@Test
@@ -96,13 +101,30 @@ class FormDataControllerTest {
 			doPostRequest().andExpect(status().is2xxSuccessful());
 		}
 
+
+		@Test
+		void shouldCallVorgangNummerSupplier() {
+			doPostRequest();
+
+			verify(vorgangNummerSupplier).get();
+		}
+
 		@Test
 		@SneakyThrows
 		void shouldRespondeWithVorgangNummer() {
+
 			var confirmation = FormCycleConfirmationResponse.parseFrom(
 					doPostRequest().andReturn().getResponse().getContentAsByteArray());
 
-			assertThat(confirmation.getVorgangNummer()).isEqualTo("TODO FILL ME");
+			assertThat(confirmation.getVorgangNummer()).isEqualTo(VORGANG_NUMMER);
+		}
+
+		@Test
+		void shouldSetVorgangNummer() {
+			doPostRequest();
+
+			verify(semantikAdapter).processFormData(formDataCaptor.capture());
+			assertThat(formDataCaptor.getValue().getHeader().getRequestId()).isEqualTo(VORGANG_NUMMER);
 		}
 
 		@Test
@@ -117,7 +139,7 @@ class FormDataControllerTest {
 			doPostRequest();
 
 			verify(semantikAdapter).processFormData(formDataCaptor.capture());
-			assertThat(formDataCaptor.getValue()).usingRecursiveComparison().ignoringFields("representations", "attachments", "numberOfAttachments")
+			assertThat(formDataCaptor.getValue()).usingRecursiveComparison().ignoringFields("representations", "attachments", "numberOfAttachments", "header.requestId")
 					.isEqualTo(mappedFormData);
 		}
 
diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/VorgangNummerSupplierTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/VorgangNummerSupplierTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..42a7be6008e89a9b316a933cf5dcaac7c78ab229
--- /dev/null
+++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/itvsh/kop/eingang/formcycle/VorgangNummerSupplierTest.java
@@ -0,0 +1,84 @@
+package de.itvsh.kop.eingang.formcycle;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.time.LocalDate;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.Spy;
+
+class VorgangNummerSupplierTest {
+
+	@Spy
+	private VorgangNummerSupplier vorgangNummerSupplier = new VorgangNummerSupplier();
+
+	@Nested
+	@DisplayName("Get Vorgang Nummer")
+	class TestGetVorgangNummer {
+
+		@Test
+		void shouldCallAddPrefix() {
+			vorgangNummerSupplier.get();
+
+			verify(vorgangNummerSupplier).initWithPrefix();
+		}
+
+		@Test
+		@DisplayName("should add random suffix of length 6")
+		void shouldAddSuffix() {
+			doReturn(new StringBuilder()).when(vorgangNummerSupplier).initWithPrefix();
+
+			var result = vorgangNummerSupplier.get();
+
+			assertThat(result).hasSize(6);
+		}
+	}
+
+	@Nested
+	class TestAddPrefix{
+
+		@Test
+		void shouldHaveSize(){
+			var resultBuilder = vorgangNummerSupplier.initWithPrefix();
+
+			assertThat(resultBuilder).hasSize(6);
+		}
+		@Test
+		void shouldAddLastYearNumberFirst(){
+			var lastYearNumber = "" + LocalDate.now().getYear() % 10;
+
+			var resultBuilder = vorgangNummerSupplier.initWithPrefix();
+
+			assertThat(resultBuilder.substring(0,1)).isEqualTo(lastYearNumber);
+		}
+
+		@Test
+		void shouldAddMonthValueSecond(){
+			var monthValue = "%02d".formatted(LocalDate.now().getMonthValue());
+
+			var resultBuilder = vorgangNummerSupplier.initWithPrefix();
+
+			assertThat(resultBuilder.substring(1, 3)).isEqualTo(monthValue);
+		}
+
+		@Test
+		void shouldAddDayValueThird(){
+			var dayValue = "%02d".formatted(LocalDate.now().getDayOfMonth());
+
+			var resultBuilder = vorgangNummerSupplier.initWithPrefix();
+
+			assertThat(resultBuilder.substring(3, 5)).isEqualTo(dayValue);
+		}
+
+		@Test
+		void shouldAddHyphenAtEnd(){
+			var resultBuilder = vorgangNummerSupplier.initWithPrefix();
+
+			assertThat(resultBuilder.charAt(5)).isEqualTo('-');
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/formcycle-adapter/formcycle-adapter-interface/pom.xml b/formcycle-adapter/formcycle-adapter-interface/pom.xml
index 36ade3e01d8e457467ed1fc68958f57cd540d749..b321e925d70826fdf74b323818b84fd7a19302f5 100644
--- a/formcycle-adapter/formcycle-adapter-interface/pom.xml
+++ b/formcycle-adapter/formcycle-adapter-interface/pom.xml
@@ -29,14 +29,14 @@
 	<parent>
 		<groupId>de.itvsh.kop.common</groupId>
 		<artifactId>kop-common-dependencies</artifactId>
-		<version>2.0.0</version>
+		<version>2.0.1</version>
 		<relativePath />
 	</parent>
 
 	<groupId>de.itvsh.kop.eingangsadapter</groupId>
 	<artifactId>formcycle-adapter-interface</artifactId>
 	<name>EM - Formcycle Adapter - Interface</name>
-	<version>1.9.0-SNAPSHOT</version>
+	<version>1.10.0-SNAPSHOT</version>
 	
 	<properties>
 		<pluto.version>1.8.0</pluto.version>
diff --git a/formcycle-adapter/pom.xml b/formcycle-adapter/pom.xml
index 20c2643269b99ffa21a29282f5a44b43cfea399b..ceb0c3d5e13c4e56e245ec00d2fce15c86024da7 100644
--- a/formcycle-adapter/pom.xml
+++ b/formcycle-adapter/pom.xml
@@ -29,7 +29,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 	</parent>
 
 	<artifactId>formcycle-adapter</artifactId>
diff --git a/formsolutions-adapter/pom.xml b/formsolutions-adapter/pom.xml
index 0894bf1973998a6f31cf849e59d4cb829a3e91ef..11a4d73879284fda10d3fcbae76926877d265e91 100644
--- a/formsolutions-adapter/pom.xml
+++ b/formsolutions-adapter/pom.xml
@@ -30,7 +30,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsAttachmentsMapper.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsAttachmentsMapper.java
index 4781b63438dd76f538f64ae9eb58cde6d1357ffa..91c647211d5e3d4c390cabf8bf0ee6426e8816bd 100644
--- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsAttachmentsMapper.java
+++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsAttachmentsMapper.java
@@ -29,14 +29,17 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.UUID;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
 import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileGroup;
 
 @Component
 class FormSolutionsAttachmentsMapper {
+
 	public static final String ZIP = "zip";
 	public static final String FILE_NAME_ZIP_ATTACHMENT = "attachments.zip";
 	public static final String ZIP_CONTENT_TYPE = "application/zip";
@@ -47,15 +50,32 @@ class FormSolutionsAttachmentsMapper {
 	}
 
 	List<IncomingFileGroup> mapZipRepresentation(Optional<String> encodedZip) {
-		var fileGroups = new ArrayList<IncomingFileGroup>();
-		encodedZip.filter(StringUtils::isNoneEmpty).ifPresent(content -> {
-			var files = List.of(mapFile(decodeFile(content), ZIP_CONTENT_TYPE, FILE_NAME_ZIP_ATTACHMENT));
-			fileGroups.add(IncomingFileGroup.builder()
-					.name(FILE_GROUP_ZIP_NAME)
-					.files(files)
-					.build());
-		});
-
-		return fileGroups;
+		return encodedZip.filter(StringUtils::isNoneEmpty)
+				.map(this::buildZipFile)
+				.map(this::buildFileGroup)
+				.map(this::buildMutableList)
+				.orElseGet(ArrayList::new);
+	}
+
+	private IncomingFileGroup buildFileGroup(IncomingFile zipFile) {
+		return IncomingFileGroup.builder()
+				.name(FILE_GROUP_ZIP_NAME)
+				.files(List.of(zipFile))
+				.build();
+	}
+
+	private IncomingFile buildZipFile(String content) {
+		return IncomingFile.builder()
+				.id(UUID.randomUUID().toString())
+				.contentStream(decodeFile(content))
+				.contentType(ZIP_CONTENT_TYPE)
+				.name(FILE_NAME_ZIP_ATTACHMENT)
+				.build();
+	}
+
+	private List<IncomingFileGroup> buildMutableList(IncomingFileGroup fileGroup) {
+		var list = new ArrayList<IncomingFileGroup>();
+		list.add(fileGroup);
+		return list;
 	}
 }
\ No newline at end of file
diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java
index 7f7edd6d5c074cbd682a7088b2c6ca0bfe8af670..bb1a00cc86aaf1daf2e710a51a22e8d92377efc4 100644
--- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java
+++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtils.java
@@ -26,22 +26,12 @@ package de.itvsh.kop.eingangsadapter.formsolutions;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.util.Base64;
-import java.util.UUID;
 
-import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 class FormSolutionsFileMapperUtils {
-	static IncomingFile mapFile(InputStream data, String contentType, String fileName) {
-		return IncomingFile.builder()
-				.contentStream(data)
-				.contentType(contentType)
-				.name(fileName)
-				.id(UUID.randomUUID().toString())
-				.build();
-	}
 
 	static InputStream decodeFile(String base64FileContent) {
 		// TODO ins Dateisystem schreiben, anstatt in Memory halten
diff --git a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java
index b6ad13f7cd390340bdb6d6d05fdebd105fb191da..586ecf147f7fb5a139c8a481790a346c75e2456d 100644
--- a/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java
+++ b/formsolutions-adapter/src/main/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapper.java
@@ -23,22 +23,28 @@
  */
 package de.itvsh.kop.eingangsadapter.formsolutions;
 
-import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsFileMapperUtils.*;
-
 import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.UUID;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Component;
 
+import de.itvsh.kop.common.errorhandling.TechnicalException;
 import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
 
 @Component
 class FormSolutionsRepresentationsMapper {
+
 	public static final String PDF = "pdf";
 	public static final String FILE_NAME_PDF_REP = "eingang.pdf";
 	public static final String PDF_CONTENT_TYPE = MediaType.APPLICATION_PDF_VALUE;
@@ -47,21 +53,76 @@ class FormSolutionsRepresentationsMapper {
 	public static final String FILE_NAME_JSON_REP = "form-data.json";
 	public static final String JSON_CONTENT_TYPE = MediaType.APPLICATION_JSON_VALUE;
 
+	public static final String TMP_FILE_PREFIX = "filecached-inputstream-fs";
+	public static final String TMP_FILE_SUFFIX = ".ozg-cloud.tmp";
+
 	List<IncomingFile> mapRepresentations(Map<String, Object> plainMap, Optional<String> json) {
 		List<IncomingFile> representations = new ArrayList<>();
 
-		Optional.ofNullable((String) plainMap.get(PDF)).filter(StringUtils::isNoneEmpty).ifPresent(data -> representations.add(mapPdfFile(data)));
+		Optional.ofNullable((String) plainMap.get(PDF)).filter(StringUtils::isNoneEmpty).ifPresent(data -> representations.add(buildPdfFile(data)));
 
-		json.ifPresent(jsonData -> representations.add(mapJsonFile(jsonData)));
+		json.ifPresent(jsonData -> representations.add(buildJsonFile(jsonData)));
 
 		return representations;
 	}
 
-	private IncomingFile mapJsonFile(String jsonData) {
-		return mapFile(new ByteArrayInputStream(jsonData.getBytes()), JSON_CONTENT_TYPE, FILE_NAME_JSON_REP);
+	private IncomingFile buildJsonFile(String jsonData) {
+		var size = getSize(new ByteArrayInputStream(jsonData.getBytes()));
+		return IncomingFile.builder()
+				.id(UUID.randomUUID().toString())
+				.contentStream(new ByteArrayInputStream(jsonData.getBytes()))
+				.contentType(JSON_CONTENT_TYPE)
+				.name(FILE_NAME_JSON_REP)
+				.size(size)
+				.build();
+	}
+
+	private IncomingFile buildPdfFile(String data) {
+		var size = getSize(FormSolutionsFileMapperUtils.decodeFile(data));
+		return IncomingFile.builder()
+				.id(UUID.randomUUID().toString())
+				.contentStream(FormSolutionsFileMapperUtils.decodeFile(data))
+				.contentType(PDF_CONTENT_TYPE)
+				.name(FILE_NAME_PDF_REP)
+				.size(size)
+				.build();
+	}
+
+	long getSize(InputStream contentStream) {
+		var path = writeFile(contentStream);
+		var size = getFileSize(path);
+		deleteTmpFile(path);
+
+		return size;
+	}
+
+	Path writeFile(InputStream contentStream) {
+		Path tmpFile;
+		try {
+			tmpFile = Files.createTempFile(TMP_FILE_PREFIX, TMP_FILE_SUFFIX);
+			tmpFile.toFile().deleteOnExit();
+
+			Files.copy(contentStream, tmpFile, StandardCopyOption.REPLACE_EXISTING);
+			contentStream.close();
+			return tmpFile;
+		} catch (IOException e) {
+			throw new TechnicalException("Error writing file to temp file.", e);
+		}
+	}
+
+	long getFileSize(Path path) {
+		try {
+			return Files.size(path);
+		} catch (IOException e) {
+			throw new TechnicalException("Error calculate size of tmp file.", e);
+		}
 	}
 
-	private IncomingFile mapPdfFile(String data) {
-		return mapFile(decodeFile(data), PDF_CONTENT_TYPE, FILE_NAME_PDF_REP);
+	void deleteTmpFile(Path path) {
+		try {
+			Files.deleteIfExists(path);
+		} catch (IOException e) {
+			throw new TechnicalException("Error delete tmp file.", e);
+		}
 	}
 }
\ No newline at end of file
diff --git a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtilsTest.java b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtilsTest.java
index 79db1ffd693cb73b920fb503813c5a31cf709775..a39dce7d3975d56de319c9d0d76d7810fe1d269b 100644
--- a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtilsTest.java
+++ b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsFileMapperUtilsTest.java
@@ -27,38 +27,19 @@ import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsFileMapper
 import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsFilesTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 
-import java.io.ByteArrayInputStream;
-
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
 import de.itvsh.kop.common.test.TestUtils;
-import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
 import lombok.SneakyThrows;
 
 class FormSolutionsFileMapperUtilsTest {
-	@DisplayName("Test mapping File data to IncommingFIle")
-	@Nested
-	class TestFileMapping {
-		private static final String NAME = "test.txt";
-		private static final String APPLICATION_TYPE = "application/text";
-		private static final byte[] CONTENT_BYTES = "test".getBytes();
-
-		@Test
-		@SneakyThrows
-		void shouldMapFileData() {
-			IncomingFile file = FormSolutionsFileMapperUtils.mapFile(new ByteArrayInputStream(CONTENT_BYTES), APPLICATION_TYPE, NAME);
-
-			assertThat(TestUtils.contentStreamToByteArray(file.getContentStream())).isEqualTo(CONTENT_BYTES);
-			assertThat(file.getContentType()).isEqualTo(APPLICATION_TYPE);
-			assertThat(file.getName()).isEqualTo(NAME);
-		}
-	}
 
 	@DisplayName("Test decoding base64 encoded file")
 	@Nested
 	class TestDecodingBase64Content {
+
 		@Test
 		@SneakyThrows
 		void shouldDecodeFile() {
@@ -67,4 +48,4 @@ class FormSolutionsFileMapperUtilsTest {
 			assertThat(TestUtils.contentStreamToByteArray(decodedFileContentStream)).isEqualTo(ZIP_DECODED);
 		}
 	}
-}
+}
\ No newline at end of file
diff --git a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java
index 69d3587df67f2090d3b55edc09469fcbf6447c22..6631cc4bc955a8db6ba6fe369149e6cb4903f276 100644
--- a/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java
+++ b/formsolutions-adapter/src/test/java/de/itvsh/kop/eingangsadapter/formsolutions/FormSolutionsRepresentationsMapperTest.java
@@ -27,80 +27,116 @@ import static de.itvsh.kop.eingangsadapter.common.formdata.FormSolutionsTestFact
 import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsFilesTestFactory.*;
 import static de.itvsh.kop.eingangsadapter.formsolutions.FormSolutionsRepresentationsMapper.*;
 import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Path;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
+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.mockito.Mock;
+import org.mockito.Spy;
 
+import de.itvsh.kop.common.errorhandling.TechnicalException;
 import de.itvsh.kop.common.test.TestUtils;
 import de.itvsh.kop.eingangsadapter.common.formdata.FormSolutionsTestFactory;
 import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFile;
+import de.itvsh.kop.eingangsadapter.common.formdata.IncomingFileTestFactory;
 import lombok.SneakyThrows;
 
 class FormSolutionsRepresentationsMapperTest {
+
+	@Spy
 	private FormSolutionsRepresentationsMapper mapper = new FormSolutionsRepresentationsMapper();
 
+	@DisplayName("Map representations")
 	@Nested
-	class TestRepresentationsMapping {
+	class TestMapRepresentations {
+
+		@DisplayName("pdf")
 		@Nested
 		class TestPdfRepresentations {
+
 			@Test
 			@SneakyThrows
-			void shouldParsePdf() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(JSON_CONTENT));
+			void shouldSetContentStrean() {
+				var representation = mapRepresentationPdf();
 
-				assertThat(TestUtils.contentStreamToByteArray(getRepresentation(map, 0).getContentStream())).isEqualTo(PDF_DECODED);
+				assertThat(TestUtils.contentStreamToByteArray(representation.getContentStream())).isEqualTo(PDF_DECODED);
 			}
 
 			@Test
-			void shouldSetPdfContentType() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(JSON_CONTENT));
+			void shouldSetHaveContentType() {
+				var representation = mapRepresentationPdf();
 
-				assertThat(getRepresentation(map, 0).getContentType()).isEqualTo(PDF_CONTENT_TYPE);
+				assertThat(representation.getContentType()).isEqualTo(PDF_CONTENT_TYPE);
 			}
 
 			@Test
-			void shouldSetPdfFileName() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(JSON_CONTENT));
+			void shouldSetName() {
+				var representation = mapRepresentationPdf();
+
+				assertThat(representation.getName()).isEqualTo(FILE_NAME_PDF_REP);
+			}
+
+			@Test
+			void shouldSetSize() {
+				var representation = mapRepresentationPdf();
+
+				assertThat(representation.getSize()).isEqualTo(FormSolutionsFilesTestFactory.PDF_DECODED.length);
+			}
 
-				assertThat(getRepresentation(map, 0).getName()).isEqualTo(FILE_NAME_PDF_REP);
+			private IncomingFile mapRepresentationPdf() {
+				return mapRepresentation(JSON_CONTENT).get(0);
 			}
 		}
 
+		@DisplayName("json")
 		@Nested
 		class TestJsonRepresentation {
 
+			@Test
+			void shouldHaveSize() {
+				var map = mapRepresentation(SIMPLE_JSON_DATA);
+
+				assertThat(map).hasSize(2);
+			}
+
 			@Test
 			@SneakyThrows
-			void shouldParseJson() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(SIMPLE_JSON_DATA));
+			void shouldSetContentStream() {
+				var representation = mapRepresentationJson();
 
-				assertThat(TestUtils.contentStreamToByteArray(getRepresentation(map, 1).getContentStream()))
+				assertThat(TestUtils.contentStreamToByteArray(representation.getContentStream()))
 						.isEqualTo(FormSolutionsTestFactory.SIMPLE_JSON_DATA.getBytes());
 			}
 
 			@Test
-			void shouldSetJsonContentType() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(SIMPLE_JSON_DATA));
+			void shouldSetContentType() {
+				var representation = mapRepresentationJson();
 
-				assertThat(getRepresentation(map, 1).getContentType()).isEqualTo(JSON_CONTENT_TYPE);
+				assertThat(representation.getContentType()).isEqualTo(JSON_CONTENT_TYPE);
 			}
 
 			@Test
-			void shouldSetJsonFileName() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(SIMPLE_JSON_DATA));
+			void shouldSetName() {
+				var representation = mapRepresentationJson();
 
-				assertThat(getRepresentation(map, 1).getName()).isEqualTo(FILE_NAME_JSON_REP);
+				assertThat(representation.getName()).isEqualTo(FILE_NAME_JSON_REP);
 			}
 
 			@Test
-			void shouldParse() {
-				var map = mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(SIMPLE_JSON_DATA));
+			void shouldSetSize() {
+				var representation = mapRepresentationJson();
 
-				assertThat(map).hasSize(2);
+				assertThat(representation.getSize()).isEqualTo(SIMPLE_JSON_DATA.getBytes().length);
 			}
 
 			@Test
@@ -111,12 +147,67 @@ class FormSolutionsRepresentationsMapperTest {
 						Optional.of(SIMPLE_JSON_DATA));
 
 				assertThat(map).hasSize(1);
-				assertThat(getRepresentation(map, 0).getContentType()).isEqualTo(JSON_CONTENT_TYPE);
+				assertThat(map.get(0).getContentType()).isEqualTo(JSON_CONTENT_TYPE);
+			}
+
+			private IncomingFile mapRepresentationJson() {
+				return mapRepresentation(SIMPLE_JSON_DATA).get(1);
 			}
 		}
+
+		private List<IncomingFile> mapRepresentation(String content) {
+			return mapper.mapRepresentations(REPRESENTATIONS.getFormData(), Optional.of(content));
+		}
+	}
+
+	@DisplayName("Get Size")
+	@Nested
+	class TestGetSize {
+
+		@Mock
+		private InputStream stream;
+		@Mock
+		private Path path;
+
+		@BeforeEach
+		void mock() {
+			doReturn(path).when(mapper).writeFile(any());
+			doReturn(IncomingFileTestFactory.SIZE).when(mapper).getFileSize(any());
+			doNothing().when(mapper).deleteTmpFile(any());
+		}
+
+		@Test
+		void shouldWriteFile() {
+			mapper.getSize(stream);
+
+			verify(mapper).writeFile(stream);
+		}
+
+		@Test
+		void shouldGetFileSize() {
+			mapper.getSize(stream);
+
+			verify(mapper).getFileSize(path);
+		}
+
+		@Test
+		void shouldDeleteTmpFile() {
+			mapper.getSize(stream);
+
+			verify(mapper).deleteTmpFile(path);
+		}
 	}
 
-	private IncomingFile getRepresentation(List<IncomingFile> map, int index) {
-		return map.get(index);
+	@Nested
+	class TestWriteFile {
+
+		@Test
+		@SneakyThrows
+		void shouldThrowTechnicalException() {
+			InputStream closedStream = mock(InputStream.class);
+			when(closedStream.transferTo(any())).thenThrow(IOException.class);
+
+			assertThatThrownBy(() -> mapper.writeFile(closedStream)).isInstanceOf(TechnicalException.class);
+		}
 	}
 }
diff --git a/forwarder/pom.xml b/forwarder/pom.xml
index 8ef2b70a80f7a64ab7374b2245b6a40381d8d629..e631f9c970c1aa365e62189064e01f0a670fa581 100644
--- a/forwarder/pom.xml
+++ b/forwarder/pom.xml
@@ -29,7 +29,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
diff --git a/intelliform-adapter/pom.xml b/intelliform-adapter/pom.xml
index d2383ae7f96077917d675c4c7c9657679d5e93d4..426682ce68e8a0ec7ced288b4cb771dec12206cd 100644
--- a/intelliform-adapter/pom.xml
+++ b/intelliform-adapter/pom.xml
@@ -31,7 +31,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
diff --git a/pom.xml b/pom.xml
index 55c9dcc94ab00603b67292f5e83537b69b746e82..16b74790abd0aa2a59d7ebc56e7d959dc6457b69 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,7 @@
 	
 	<groupId>de.itvsh.kop.eingangsadapter</groupId>
 	<artifactId>parent</artifactId>
-	<version>1.9.0-SNAPSHOT</version>
+	<version>1.10.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	<name>Eingangs Adapter - Parent</name>
 
diff --git a/release-erstellen.sh b/release-erstellen.sh
index a7105c9df6360bf3e5c8b7b96b7ec28a16e9f77c..dfe2a755312486a606fc94a2187bd1e52c2e3271 100755
--- a/release-erstellen.sh
+++ b/release-erstellen.sh
@@ -8,7 +8,11 @@ fi
 
 
 ## alle -SNAPSHOT in pom.xmls entfernen
-find . -name pom.xml -exec sed -i 's/-SNAPSHOT//g' {} +
+SED_PARAMS="-i"
+if [[ "$OSTYPE" =~ ^darwin ]]; then
+    SED_PARAMS="$SED_PARAMS '' -e"
+fi
+find . -name pom.xml -exec sed $SED_PARAMS 's/-SNAPSHOT//g' {} +
 
 ## release version auslesen
 NEWVERSION=$(xmlstarlet sel -N w="http://maven.apache.org/POM/4.0.0" -t -v '//w:project/w:version' -n pom.xml)
diff --git a/router/pom.xml b/router/pom.xml
index 56f4c87c8311fdc621af1bc12a5604d67e19a5d0..f4e6162de6de7f34ed630e16309da922dce68225 100644
--- a/router/pom.xml
+++ b/router/pom.xml
@@ -29,7 +29,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 		<relativePath>../</relativePath>
 	</parent>
 
diff --git a/semantik-adapter/pom.xml b/semantik-adapter/pom.xml
index 6867cda78180244cd25831eaf31f8060c7d9d5c0..44207744d7f39da4285c4a16d3a4dfa72300a4c6 100644
--- a/semantik-adapter/pom.xml
+++ b/semantik-adapter/pom.xml
@@ -30,7 +30,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 	</parent>
 	
 	<artifactId>semantik-adapter</artifactId>
diff --git a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java
index c8e1ad324f73bbd083b2802e95a046931f698ae5..bc88c2473afdf5fa77a67224f5e1061a58098e9a 100644
--- a/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java
+++ b/semantik-adapter/src/main/java/de/itvsh/kop/eingangsadapter/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java
@@ -46,10 +46,9 @@ class FormSolutionsFilesMapper implements FormSolutionsEngineBasedMapper {
 	public FormData parseFormData(FormData srcFormData) {
 		var formDataBuilder = FilesMapperHelper.getAttachedFileGroups(srcFormData)
 				.map(this::collectAttachmentContent)
-				.map(fileGroups -> srcFormData.toBuilder()
-						.attachments(fileGroups)
-						.numberOfAttachments(FilesMapperHelper.countAttachedFiles(fileGroups)))
+				.map(fileGroups -> srcFormData.toBuilder().attachments(fileGroups).numberOfAttachments(FilesMapperHelper.countAttachedFiles(fileGroups)))
 				.orElseGet(srcFormData::toBuilder);
+
 		FilesMapperHelper.getRepresentations(srcFormData)
 				.ifPresent(representations -> formDataBuilder.representations(representations).numberOfRepresentations(representations.size()));
 		return FilesMapperHelper.removeProcessedData(formDataBuilder.build());
@@ -61,7 +60,6 @@ class FormSolutionsFilesMapper implements FormSolutionsEngineBasedMapper {
 				.map(file -> ZipAttachmentReader.from(file.getContentStream(), file.getName()))
 				.map(this::mapToIncomingFileGroup)
 				.toList();
-
 	}
 
 	protected IncomingFileGroup mapToIncomingFileGroup(ZipAttachmentReader zipAttachment) {
@@ -71,16 +69,20 @@ class FormSolutionsFilesMapper implements FormSolutionsEngineBasedMapper {
 			zipAttachment.deleteSourceFile();
 		} catch (RuntimeException e) {
 			LOG.error("Cannot read source ZIP. Attach it as is.", e);
-			incomingFiles = List.of(IncomingFile.builder()
-					.name(zipAttachment.getSourceFileName())
-					.size(zipAttachment.getSourceFileSize())
-					.contentStream(zipAttachment.getSourceZipAsStream())
-					.contentType(ZIP_CONTENT_TYPE)
-					.build());
+			incomingFiles = List.of(buildIncomingZipFile(zipAttachment));
 		}
 		return createIncomingFileGroup(incomingFiles);
 	}
 
+	private IncomingFile buildIncomingZipFile(ZipAttachmentReader zipAttachment) {
+		return IncomingFile.builder()
+				.name(zipAttachment.getSourceFileName())
+				.size(zipAttachment.getSourceFileSize())
+				.contentStream(zipAttachment.getSourceZipAsStream())
+				.contentType(ZIP_CONTENT_TYPE)
+				.build();
+	}
+
 	protected IncomingFileGroup createIncomingFileGroup(Collection<IncomingFile> incomingFiles) {
 		return IncomingFileGroup.builder().name(EXTRAHIERTE_ATTACHMENTS).files(incomingFiles).build();
 	}
diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl
index b3a576dd8c199c1070ddf3cfdac16b2c716328f3..10b786e54ef44f05cbf6471db5c915ac1213b893 100644
--- a/src/main/helm/templates/_helpers.tpl
+++ b/src/main/helm/templates/_helpers.tpl
@@ -69,24 +69,6 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }}
 {{- end -}}
 {{- end -}}
 
-{{- define "app.resources" }}
-{{- if eq (include "app.kopEnvironment" . ) "prod" }}
-  limits:
-    cpu: "500m"
-    memory: "1000Mi"
-  requests:
-    cpu: "50m"
-    memory: "250Mi"
-{{- else }}
-  limits:
-    cpu: "500m"
-    memory: "1000Mi"
-  requests:
-    cpu: "50m"
-    memory: "250Mi"
-{{- end }}
-{{- end -}}
-
 {{- define "app.ingress.host" }}
 {{- if eq (.Values.image).name "formsolutions-adapter" }}
 {{- printf "%s-fs.%s" (include "app.kopBezeichner" .) .Values.baseUrl }}
diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml
index 48bca75d60711118fc724a4885e628c0143e8801..9b5b7c082e139e660858b4605c016abdb31e44bd 100644
--- a/src/main/helm/templates/deployment.yaml
+++ b/src/main/helm/templates/deployment.yaml
@@ -111,7 +111,9 @@ spec:
           successThreshold: 1
           timeoutSeconds: 5
         resources:
-          {{- include "app.resources" . | indent 8 }}
+        {{- with .Values.resources }}
+{{ toYaml . | indent 10 }}
+        {{- end }}
         securityContext:
           allowPrivilegeEscalation: false
           privileged: false
diff --git a/src/test/helm/deployment_resources_test.yaml b/src/test/helm/deployment_resources_test.yaml
index 588505e7ed340abef50404ea1ec69a6848fbc8d4..744cc072737cf7858190c1af10d9be704eb7436e 100644
--- a/src/test/helm/deployment_resources_test.yaml
+++ b/src/test/helm/deployment_resources_test.yaml
@@ -24,42 +24,35 @@
 
 suite: test deployment
 release:
-  name: afm_adapter
+  name: afm-adapter
 templates:
   - templates/deployment.yaml
 tests:
-  - it: test resources for prod environment
-    release:
-      namespace: sh-helm-prod
+  - it: test resources
     set:
-      kop.environment: prod
+      resources:
+        limits:
+          cpu: "11m"
+          memory: "22Mi"
+        requests:
+          cpu: "33m"
+          memory: "44Mi"
     asserts:
       - equal:
           path: spec.template.spec.containers[0].resources.limits.cpu
-          value: 500m
+          value: 11m
       - equal:
           path: spec.template.spec.containers[0].resources.limits.memory
-          value: 1000Mi
+          value: 22Mi
       - equal:
           path: spec.template.spec.containers[0].resources.requests.cpu
-          value: 50m
+          value: 33m
       - equal:
           path: spec.template.spec.containers[0].resources.requests.memory
-          value: 250Mi
-  - it: test default resources
-    release:
-      namespace: sh-helm-test
+          value: 44Mi
+
+  - it: test empty resources
     asserts:
-      - equal:
-          path: spec.template.spec.containers[0].resources.limits.cpu
-          value: 500m
-      - equal:
-          path: spec.template.spec.containers[0].resources.limits.memory
-          value: 1000Mi
-      - equal:
-          path: spec.template.spec.containers[0].resources.requests.cpu
-          value: 50m
-      - equal:
-          path: spec.template.spec.containers[0].resources.requests.memory
-          value: 250Mi
+      - isEmpty:
+          path: spec.template.spec.containers[0].resources
 
diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml
index 92a32690e074bea447df9fcbf3858066d51889ff..c0399018687cba257d8a8fc3dcef1c658a542235 100644
--- a/xta-adapter/pom.xml
+++ b/xta-adapter/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>de.itvsh.kop.eingangsadapter</groupId>
 		<artifactId>parent</artifactId>
-		<version>1.9.0-SNAPSHOT</version>
+		<version>1.10.0-SNAPSHOT</version>
 	</parent>
 	<artifactId>xta-adapter</artifactId>
 	<name>Eingangs Adapter - XTA</name>
diff --git a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml
index 4cab0e827ff784fb33648f1f161ea64d1644651e..47aa8cd899a803aac2fa5105f738e8260d5c562a 100644
--- a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml
+++ b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml
@@ -46,7 +46,7 @@ spec:
           restartPolicy: Never
           containers:
             - name: xta-adapter
-              image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
+              image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ (.Values.image).tag }}"
               imagePullPolicy: Always
               env:
                 - name: spring_profiles_active
@@ -94,6 +94,46 @@ spec:
                   mountPath: "/workspace/keystore/xta-keystore.p12"
                   subPath: file
                   readOnly: true
+              securityContext:
+                allowPrivilegeEscalation: false
+                privileged: false
+                readOnlyRootFilesystem: false
+                runAsNonRoot: false
+              resources:
+              {{- with .Values.resources }}
+{{ toYaml . | indent 16 }}
+              {{- end }}
+
+              {{- if (.Values.dummyProbesEnabled) }}
+              livenessProbe:
+                exec:
+                  command:
+                  - echo
+                  - '>'
+                  - /dev/null
+                periodSeconds: 10
+                successThreshold: 1
+                timeoutSeconds: 3
+              readinessProbe:
+                exec:
+                  command:
+                  - echo
+                  - '>'
+                  - /dev/null
+                periodSeconds: 10
+                successThreshold: 1
+                timeoutSeconds: 3
+              startupProbe:
+                exec:
+                  command:
+                  - echo
+                  - '>'
+                  - /dev/null
+                periodSeconds: 10
+                successThreshold: 1
+                timeoutSeconds: 3
+              {{- end }}
+
           volumes:
             - name: bindings
               configMap:
diff --git a/xta-adapter/src/main/helm/test-values.yaml b/xta-adapter/src/main/helm/test-values.yaml
index 85c754359e8097fd26883cba7d3659fdf1dfccc2..c16404271ba0d573a4094dd66530d13737a6eee9 100644
--- a/xta-adapter/src/main/helm/test-values.yaml
+++ b/xta-adapter/src/main/helm/test-values.yaml
@@ -25,4 +25,4 @@
 kop:
   environment: test
   bezeichner: helm
-  bundesland: by
\ No newline at end of file
+  bundesland: by
diff --git a/xta-adapter/src/main/helm/values.yaml b/xta-adapter/src/main/helm/values.yaml
index e81c67a09d248c7658ebc9db4914967e3c6a5421..c889a8f60634cc866653024f6e8f071b7e8e7e94 100644
--- a/xta-adapter/src/main/helm/values.yaml
+++ b/xta-adapter/src/main/helm/values.yaml
@@ -25,7 +25,7 @@
 image:
   repo: docker.ozg-sh.de
   name: xta-adapter
-  tag: latest
+  tag: 9.9.99
 
 # env:
 #   overrideSpringProfiles: "oc,prod"
diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml
index 9138881c06f9d7f20f41f9eb5eff70523abedca7..3e0ec759c0446fb34062e1934d8dc7bd775225e9 100644
--- a/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml
+++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_basic_test.yaml
@@ -74,4 +74,29 @@ tests:
     asserts:
       - equal:
           path: spec.schedule
-          value: "*/15 * * * *"
\ No newline at end of file
+          value: "*/15 * * * *"
+  - it: check container image
+    template: xta_adapter_cronjob.yaml
+    set:
+      image.name: xta-adapter
+      kop.environment: dev
+    asserts:
+    - equal:
+        path: spec.jobTemplate.spec.template.spec.containers[0].image
+        value: "docker.ozg-sh.de/xta-adapter:9.9.99"
+
+  - it: check securityContext
+    template: xta_adapter_cronjob.yaml
+    asserts:
+    - equal:
+        path: spec.jobTemplate.spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation
+        value: false
+    - equal:
+        path: spec.jobTemplate.spec.template.spec.containers[0].securityContext.privileged
+        value: false
+    - equal:
+        path: spec.jobTemplate.spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem
+        value: false
+    - equal:
+        path: spec.jobTemplate.spec.template.spec.containers[0].securityContext.runAsNonRoot
+        value: false
\ No newline at end of file
diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e34455f65790222cf1b174fd0f21b92a4a62418e
--- /dev/null
+++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_dummy_probes_test.yaml
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2022 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.
+#
+
+suite: test xta adapter cronjob
+templates:
+  - templates/xta_adapter_cronjob.yaml
+release:
+  name: xta-adapter
+  namespace: helm-test
+tests:
+  - it: check dummy livenessProbe default disabled
+    template: xta_adapter_cronjob.yaml
+    asserts:
+      - isEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].livenessProbe
+  - it: check dummy startupProbe default disabled
+    template: xta_adapter_cronjob.yaml
+    asserts:
+      - isEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].startupProbe
+  - it: check dummy readynessProbe default disabled
+    template: xta_adapter_cronjob.yaml
+    asserts:
+      - isEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].readinessProbe
+
+  - it: check dummy livenessProbe disabled
+    template: xta_adapter_cronjob.yaml
+    set:
+      dummyProbesEnabled: false
+    asserts:
+      - isEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].livenessProbe
+  - it: check dummy startupProbe disabled
+    template: xta_adapter_cronjob.yaml
+    set:
+      dummyProbesEnabled: false
+    asserts:
+      - isEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].startupProbe
+  - it: check dummy readynessProbe disabled
+    template: xta_adapter_cronjob.yaml
+    set:
+      dummyProbesEnabled: false
+    asserts:
+      - isEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].readinessProbe
+
+
+  - it: check dummy livenessProbe enabled
+    template: xta_adapter_cronjob.yaml
+    set:
+      dummyProbesEnabled: true
+    asserts:
+      - isNotEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].livenessProbe
+  - it: check dummy startupProbe enabled
+    template: xta_adapter_cronjob.yaml
+    set:
+      dummyProbesEnabled: true
+    asserts:
+      - isNotEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].startupProbe
+  - it: check dummy readynessProbe enabled
+    template: xta_adapter_cronjob.yaml
+    set:
+      dummyProbesEnabled: true
+    asserts:
+      - isNotEmpty:
+          path: spec.jobTemplate.spec.template.spec.containers[0].readinessProbe
diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..198021ea113204629eca21b78cc1b6fa373a28c9
--- /dev/null
+++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_resources_test.yaml
@@ -0,0 +1,54 @@
+#
+# Copyright (C) 2022 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.
+#
+
+suite: test xta adapter cronjob
+templates:
+  - templates/xta_adapter_cronjob.yaml
+release:
+  name: xta-adapter
+  namespace: helm-test
+tests:
+  - it: check resources
+    template: xta_adapter_cronjob.yaml
+    set:
+      resources:
+        limits:
+          cpu: "11m"
+          memory: "22Mi"
+        requests:
+          cpu: "33m"
+          memory: "44Mi"
+    asserts:
+      - equal:
+          path: spec.jobTemplate.spec.template.spec.containers[0].resources.limits.cpu
+          value: "11m"
+      - equal:
+          path: spec.jobTemplate.spec.template.spec.containers[0].resources.limits.memory
+          value: "22Mi"
+      - equal:
+          path: spec.jobTemplate.spec.template.spec.containers[0].resources.requests.cpu
+          value: "33m"
+      - equal:
+          path: spec.jobTemplate.spec.template.spec.containers[0].resources.requests.memory
+          value: "44Mi"