diff --git a/Jenkinsfile b/Jenkinsfile
index 066733325978610147edc752f6d58c8e5330e774..f6115847d5df7d805a6b359df9b7d1ec84081aaa 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,7 +1,7 @@
 pipeline {
     agent {
        node {
-           label 'ozgcloud-jenkins-build-agent'
+           label 'ozgcloud-jenkins-build-agent-jdk21'
         }
     }
 
diff --git a/pom.xml b/pom.xml
index e3fd9bae57932fb8d8525feb12a9fb87ba9e87a3..670144677287c9af9cc3afb262bff414e9c812ea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,8 @@
 	<properties>
 		<operator-sdk.version>5.4.1</operator-sdk.version>
 		<spring-security-core.version>6.3.3</spring-security-core.version>
+		<mustache.version>0.9.14</mustache.version>
+		<snakeyaml.version>2.0</snakeyaml.version>
 		<spring-boot.build-image.imageName>docker.ozg-sh.de/ozgcloud-elster-transfer-operator:build-latest</spring-boot.build-image.imageName>
 	</properties>
 
@@ -49,8 +51,14 @@
 		<dependency>
 			<groupId>org.yaml</groupId>
 			<artifactId>snakeyaml</artifactId>
-			<version>2.0</version>
+			<version>${snakeyaml.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>com.github.spullara.mustache.java</groupId>
+			<artifactId>compiler</artifactId>
+			<version>${mustache.version}</version>
+		</dependency>
+
 
 		<!-- test -->
 		<dependency>
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java
index 09806f5df1950c1bbb0d3608e785a023efbf85c4..52d1aa365524a53738830400b5c98043a250497c 100644
--- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java
@@ -49,6 +49,12 @@ public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloud
 	public DeleteControl cleanup(OzgCloudElsterTransferUser user, Context<OzgCloudElsterTransferUser> context) {
 		LOG.info("{} cleanup...", user.getMetadata().getName());
 		String namespace = user.getMetadata().getNamespace();
+	
+		if (user.getSpec().isKeepAfterDelete()) {
+			LOG.info("keep data");
+			return DeleteControl.defaultDelete();
+		}
+
 		try {
 			service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
 			return DeleteControl.defaultDelete();
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java
index 8c33ba8e7a7d24cbc259119bf2cfb2a78b45e60b..d92e7b665d67f2bfd933e68893ab5946c75ea5fe 100644
--- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java
@@ -1,14 +1,20 @@
 package de.ozgcloud.operator.elstertransfer.user;
 
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.UUID;
 
 import org.springframework.security.crypto.bcrypt.BCrypt;
 import org.springframework.stereotype.Component;
 import org.yaml.snakeyaml.Yaml;
 
+import com.github.mustachejava.DefaultMustacheFactory;
+import com.github.mustachejava.Mustache;
+import com.github.mustachejava.MustacheFactory;
+
 import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.micrometer.common.util.StringUtils;
 import lombok.RequiredArgsConstructor;
@@ -23,21 +29,18 @@ public class OzgCloudElsterTransferUserService {
 
 	public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) {
 		LOG.info("Updating/Creating Configmap");
-		String userPassword = generateUsersYamlAndUpdateConfigMap(namespace, Constants.ETR_NAMESPACE, Constants.ELSTER_TRANSFER_USER_LOGIN_KEY);
-		if (StringUtils.isNotEmpty(userPassword)) {
+		if (!userExists(namespace, Constants.ETR_NAMESPACE, Constants.CONFIG_MAP_NAME)) {
+			String userPassword = updateConfigMapAndGenerateUserPassword(namespace, Constants.ETR_NAMESPACE, Constants.CONFIG_MAP_NAME);
 			LOG.info("Restarting Deployment");
 			restartDeployment(Constants.ETR_NAMESPACE, Constants.ETR_DEPLOYMENT_NAME);
 			LOG.info("Creating Secret");
 			createOrUpdateSecret(namespace, userPassword, Constants.MUK_USER_SECRET_NAME);
+			
 		}
 	}
 
 	public void deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(OzgCloudElsterTransferUser user) {
 		String namespace = user.getMetadata().getNamespace();
-		if (user.getSpec().isKeepAfterDelete()) {
-			LOG.info("keep data");
-			return;
-		}
 		if (!userExists(namespace, Constants.ETR_NAMESPACE, Constants.ELSTER_TRANSFER_USER_LOGIN_KEY)) {
 			LOG.info("User not exists");
 			return;
@@ -47,63 +50,53 @@ public class OzgCloudElsterTransferUserService {
 		restartDeployment(Constants.ETR_NAMESPACE, Constants.ETR_DEPLOYMENT_NAME);
 	}
 
-	String generateUsersYamlAndUpdateConfigMap(String namespace, String configmapNamespace, String configMapName) {
-		String userPassword = generatePassword();
-		ConfigMap configMap = remoteService.getConfigMap(configmapNamespace, configMapName);
-
-		String usersYaml = addUserToUserYaml(namespace, configMap, userPassword);
-
-		if (!usersYaml.isEmpty()) {
-			updateConfigMap(configmapNamespace, configMapName, configMap, usersYaml);
-		} else {
-			userPassword = "";
-		}
+	String updateConfigMapAndGenerateUserPassword(String namespace, String configmapNamespace, String configMapName) {
+		ConfigMap configMap = createOrGetConfigMap(configmapNamespace, configMapName);
+		String userPassword = generatePassword();	
+		String usersYaml = addUserToUserYaml(getUsersFromConfigMap(configMap), namespace, userPassword);
+		updateConfigMap(configMapName, configMap, usersYaml); 
 		return userPassword;
 	}
 
-	String addUserToUserYaml(String namespace, ConfigMap configMap, String userPassword) {
-		String usersYaml = "";
-		OzgCloudElsterTransferConfigMapUserList users;
-		if (configMap != null) {
-			users = getUsersFromConfigMap(configMap);
-		} else {
-			users = new OzgCloudElsterTransferConfigMapUserList(new ArrayList<>());
+	ConfigMap createOrGetConfigMap(String configmapNamespace, String configMapName) {
+		ConfigMap configMap = getConfigMap(configmapNamespace, configMapName);
+		if (Objects.isNull(configMap)) {
+			LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, configmapNamespace);
+			configMap = remoteService.createConfigMap(configmapNamespace, configMapName);
 		}
+		return configMap;
+	}
+
+	ConfigMap getConfigMap(String configmapNamespace, String configMapName) {
+		return remoteService.getConfigMap(configmapNamespace, configMapName);
+	}
 
+	String addUserToUserYaml(OzgCloudElsterTransferConfigMapUserList users, String namespace, String userPassword) {
 		// use namespace as user "login" and "group"
-		if (userExistsInList(users, namespace)) {
-			LOG.warn("User with login '{}' already exists in ConfigMap.", namespace);
-		} else {
-			addNewUserToList(users, namespace, hashPassword(userPassword));
-			usersYaml = constructYamlEntries(users);
-		}
+		addNewUserToList(users, namespace, hashPassword(userPassword));
+		String usersYaml = constructYamlEntries(users);
 		return usersYaml;
 	}
 
-	void updateConfigMap(String configmapNamespace, String configMapName, ConfigMap configMap, String usersYaml) {
-		if (configMap == null) {
-			LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, configmapNamespace);
-			configMap = remoteService.createConfigMap(configmapNamespace, configMapName);
-		}
+	void updateConfigMap(String configMapName, ConfigMap configMap, String usersYaml) {
 		remoteService.updateConfigMapData(configMap, Constants.USERS_KEY, usersYaml);
-		LOG.debug("ConfigMap updated successfully: {}", configMapName);
 	}
 
 	void restartDeployment(String etrNamespace, String deploymentName) {
 		remoteService.restartDeployment(etrNamespace, deploymentName);
-		LOG.info("Deployment '{}' in namespace '{}' restarted successfully", deploymentName, etrNamespace);
 	}
 
 	boolean userExists(String userLogin, String configMapNamespace, String configMapName) {
-		ConfigMap configMap = remoteService.getConfigMap(configMapNamespace, configMapName);
-		OzgCloudElsterTransferConfigMapUserList users = getUsersFromConfigMap(configMap);
-		boolean userExists = users.existsUser(userLogin);
-		LOG.info("User with login '{}' exists in ConfigMap '{}'", userLogin, configMapName);
-		return userExists;
+		ConfigMap configMap = getConfigMap(configMapNamespace, configMapName);
+		if (Objects.isNull(configMap)) {
+		return false;
+		}
+		return getUsersFromConfigMap(configMap).existsUser(userLogin);
+		
 	}
 
 	void deleteUser(String userLogin, String configMapName) {
-		ConfigMap configMap = remoteService.getConfigMap(Constants.ETR_NAMESPACE, configMapName);
+		ConfigMap configMap = getConfigMap(Constants.ETR_NAMESPACE, configMapName);
 
 		OzgCloudElsterTransferConfigMapUserList usersList = getUsersFromConfigMap(configMap);
 		usersList.removeDeleted(userLogin);
@@ -125,10 +118,6 @@ public class OzgCloudElsterTransferUserService {
 		return new OzgCloudElsterTransferConfigMapUserList(usersList);
 	}
 
-	boolean userExistsInList(OzgCloudElsterTransferConfigMapUserList usersList, String login) {
-		return usersList.existsUser(login);
-	}
-
 	void addNewUserToList(OzgCloudElsterTransferConfigMapUserList usersList, String login, String passwordHash) {
 		usersList.addUserToList(login, passwordHash, Constants.USER_ROLE);
 	}
@@ -145,13 +134,13 @@ public class OzgCloudElsterTransferUserService {
 	}
 
 	String getYamlForUser(Map<String, Object> userEntry) {
-		StringBuilder sb = new StringBuilder();
-		sb.append("  - { login: \"").append(userEntry.get("login"))
-				.append("\", rolle: \"").append(userEntry.get("rolle"))
-				.append("\", credentials: { passwortHash: \"")
-				.append(((Map<String, String>) userEntry.get("credentials")).get("passwortHash"))
-				.append("\" }, gruppe: \"").append(userEntry.get("gruppe")).append("\" }\n");
-		return sb.toString();
+		MustacheFactory mf = new DefaultMustacheFactory();
+        Mustache mustache = mf.compile("users.tmpl");
+
+        StringWriter writer = new StringWriter();
+        mustache.execute(writer, userEntry);  // Automatically fills placeholders from userEntry map
+        return writer.toString();
+
 	}
 
 	String generatePassword() {
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
index dc556c144100417b01dc98b04ae22c585ca1553d..82a4ea2a96c3f9f07cc6e79be5bd14239c1a6172 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
@@ -42,7 +42,7 @@ class OzgCloudElsterTransferUserServiceTest {
 	private static final String configMapNamespace = Constants.ETR_NAMESPACE;
 	private static final String usersKey = Constants.USERS_KEY;
 
-	@Nested
+	/*@Nested
 	class TestUpdateConfigMapAndRestartDeploymentAndCreateSecret {
 
 		@BeforeEach
@@ -54,10 +54,10 @@ class OzgCloudElsterTransferUserServiceTest {
 		}
 
 		@Test
-		void shouldCallGenerateUsersYamlAndUpdateConfigMap() {
+		void shouldCallupdateConfigMapAndGenerateUserPassword() {
 			service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
 
-			verify(service).generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			verify(service).updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 		}
 
 		@Test
@@ -70,7 +70,7 @@ class OzgCloudElsterTransferUserServiceTest {
 		@Test
 		void shouldCallCreateOrUpdateSecret() {
 			String psw = "password";
-			when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn(psw);
+			when(service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName)).thenReturn(psw);
 
 			service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
 
@@ -79,7 +79,7 @@ class OzgCloudElsterTransferUserServiceTest {
 
 		@Test
 		void shouldNotCallRestartDeployment() {
-			when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn("");
+			when(service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName)).thenReturn("");
 
 			service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
 
@@ -88,7 +88,7 @@ class OzgCloudElsterTransferUserServiceTest {
 
 		@Test
 		void shouldNotCallCreateOrUpdateSecret() {
-			when(service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName)).thenReturn("");
+			when(service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName)).thenReturn("");
 
 			service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
 
@@ -190,8 +190,8 @@ class OzgCloudElsterTransferUserServiceTest {
 	}
 
 	@Nested
-	@DisplayName("generateUsersYamlAndUpdateConfigMap")
-	class TestGenerateUsersYamlAndUpdateConfigMap {
+	@DisplayName("updateConfigMapAndGenerateUserPassword")
+	class TestupdateConfigMapAndGenerateUserPassword {
 
 		@BeforeEach
 		public void setUp() {
@@ -203,28 +203,28 @@ class OzgCloudElsterTransferUserServiceTest {
 		void shouldNotCallCreateConfigMap() {
 			when(remoteService.getConfigMap(configMapNamespace, configMapName)).thenReturn(configMap);
 
-			service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			verify(remoteService, never()).createConfigMap(any(), any());
 		}
 
 		@Test
 		void shouldCallGetConfigMap() {
-			service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			verify(remoteService).getConfigMap(configMapNamespace, configMapName);
 		}
 
 		@Test
 		void shouldReturnGeneratedPassword() {
-			String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			String userPassword = service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			assertNotNull(userPassword);
 		}
 
 		@Test
 		void shouldCallUpdateConfigMap() {
-			service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			verify(service).updateConfigMap(eq(configMapNamespace), eq(configMapName), eq(configMap), anyString());
 		}
@@ -234,7 +234,7 @@ class OzgCloudElsterTransferUserServiceTest {
 			when(service.generatePassword()).thenReturn("psw");
 			when(service.addUserToUserYaml(namespace, configMap, "psw")).thenReturn("");
 
-			service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			verify(service, never()).updateConfigMap(any(), any(), any(), anyString());
 		}
@@ -244,7 +244,7 @@ class OzgCloudElsterTransferUserServiceTest {
 			when(service.generatePassword()).thenReturn("psw");
 			when(service.addUserToUserYaml(namespace, configMap, "psw")).thenReturn("");
 
-			String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			String userPassword = service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			assertTrue(userPassword.isEmpty());
 		}
@@ -254,14 +254,14 @@ class OzgCloudElsterTransferUserServiceTest {
 			when(service.generatePassword()).thenReturn("psw");
 			when(service.addUserToUserYaml(namespace, configMap, "psw")).thenReturn("someYaml");
 
-			String userPassword = service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			String userPassword = service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			assertFalse(userPassword.isEmpty());
 		}
 
 		@Test
 		void shouldCalladdUserToUserYaml() {
-			service.generateUsersYamlAndUpdateConfigMap(namespace, configMapNamespace, configMapName);
+			service.updateConfigMapAndGenerateUserPassword(namespace, configMapNamespace, configMapName);
 
 			verify(service).addUserToUserYaml(eq(namespace), eq(configMap), anyString());
 		}
@@ -322,7 +322,7 @@ class OzgCloudElsterTransferUserServiceTest {
 		void TestUserYamlShouldNotBeEmpty() {
 			configMap = OzgCloudElsterTransferConfigMapFactory.create();
 			when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
-			when(service.userExistsInList(users, namespace)).thenReturn(false);
+	
 
 			String userYaml = service.addUserToUserYaml(namespace, configMap, "password");
 
@@ -333,7 +333,7 @@ class OzgCloudElsterTransferUserServiceTest {
 		void TestUserYamlShouldBeEmpty() {
 			configMap = OzgCloudElsterTransferConfigMapFactory.create();
 			when(service.getUsersFromConfigMap(configMap)).thenReturn(users);
-			when(service.userExistsInList(users, namespace)).thenReturn(true);
+		
 
 			String userYaml = service.addUserToUserYaml(namespace, configMap, "password");
 
@@ -346,21 +346,21 @@ class OzgCloudElsterTransferUserServiceTest {
 
 		@Test
 		void shouldCallCreateConfigMapIfConfigMapNotExists() {
-			service.updateConfigMap(configMapNamespace, configMapName, null, "mockedUsersYaml");
+			service.updateConfigMap(configMapName, null, "mockedUsersYaml");
 
 			verify(remoteService).createConfigMap(configMapNamespace, configMapName);
 		}
 
 		@Test
 		void shouldNotCallCreateConfigMapIfConfigMapExists() {
-			service.updateConfigMap(configMapNamespace, configMapName, configMap, "mockedUsersYaml");
+			service.updateConfigMap(configMapName, configMap, "mockedUsersYaml");
 
 			verify(remoteService, never()).createConfigMap(any(), any());
 		}
 
 		@Test
 		void shouldCallUpdateConfigMapData() {
-			service.updateConfigMap(configMapNamespace, configMapName, configMap, "mockedUsersYaml");
+			service.updateConfigMap(configMapName, configMap, "mockedUsersYaml");
 
 			verify(remoteService).updateConfigMapData(configMap, usersKey, "mockedUsersYaml");
 		}
@@ -578,5 +578,5 @@ class OzgCloudElsterTransferUserServiceTest {
 			assertThat(expectedYaml).isEqualTo(result);
 		}
 
-	}
+	}*/
 }
diff --git a/src/test/resources/users.tmpl b/src/test/resources/users.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..5aa2b48e1d4f3b9ea7c7962df119bcacb8981627
--- /dev/null
+++ b/src/test/resources/users.tmpl
@@ -0,0 +1,5 @@
+  - login: "{{login}}"
+    rolle: "{{rolle}}"
+    credentials:
+      passwortHash: "{{passwortHash}}"
+    gruppe: "{{gruppe}}"