diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchReconciler.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchReconciler.java
index eefba5312435b2562de3c3f4eabfd42227082030..cc14e94d0ec0f41f039be14f8a6e92236199edfa 100644
--- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchReconciler.java
+++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/ElasticsearchReconciler.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.operator;
 
+import java.util.logging.Level;
+
 import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Component;
 
@@ -19,17 +21,17 @@ import lombok.extern.java.Log;
 @Component
 public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearchCustomResource>, Cleaner<OzgCloudElasticsearchCustomResource>  {
 
-	private final OzgCloudElasticsearchService searchService;
+	private final OzgCloudElasticsearchService service;
 
 	@Override
 	public UpdateControl<OzgCloudElasticsearchCustomResource> reconcile(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) {
 		try {
 			log.info("Reconcile user " + resource.getCRDName() + "...");
 			var namespace = resource.getMetadata().getNamespace();
-			var secret = searchService.getOrCreateCredentialSecret(resource, context);
-			searchService.createIndexIfMissing(namespace);
-			searchService.createSecurityRoleIfMissing(namespace);
-			searchService.checkSecurityUser(namespace, getPassword(secret));
+			var secret = service.getOrCreateCredentialSecret(resource, context);
+			service.createIndexIfMissing(namespace);
+			service.createSecurityRoleIfMissing(namespace);
+			service.createSecurityUserIfMissing(namespace, getPassword(secret));
 			log.info("Reconcile user successful.");
 			return OzgCloudElasticsearchUpdateControlBuilder.fromResource(resource).withStatus(CustomResourceStatus.OK).build();
 		} catch (Exception e) {
@@ -53,6 +55,15 @@ public class ElasticsearchReconciler implements Reconciler<OzgCloudElasticsearch
 	
 	@Override
 	public DeleteControl cleanup(OzgCloudElasticsearchCustomResource resource, Context<OzgCloudElasticsearchCustomResource> context) {
-		return DeleteControl.defaultDelete();
+		var namespace = resource.getMetadata().getNamespace();
+		try {
+			service.deleteSecurityUserIfExists(namespace);
+			service.deleteSecurityRoleIfExists(namespace);
+			service.deleteIndexIfExists(namespace);
+			return DeleteControl.defaultDelete();
+		} catch(Exception e) {
+			log.log(Level.INFO, String.format("Could not cleanup elasticsearch resource in namespace %s. \n %s", namespace, e));
+			return DeleteControl.defaultDelete();
+		}
 	}
 }
\ No newline at end of file
diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchService.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchService.java
index 6d04c3ae0bac0312cd34e7a473bd6bb602beadd1..53b01dec058773cac5a5277bd98ed931bc17c459 100644
--- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchService.java
+++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/OzgCloudElasticsearchService.java
@@ -86,7 +86,7 @@ public class OzgCloudElasticsearchService {
 	
 //	 curl -k -X POST -u elastic:$ELASTICSEARCH_PASSWORD -H 'Content-Type: application/json' 
 //	'https://ozg-search-cluster-es-http:9200/_security/user/'$ES_NS_USER -d '{"password" : "'$ES_NS_PASSWORD'" ,"roles" : [ "'$ES_NS_USER'" ]}'
-	public void checkSecurityUser(String namespace, String password) throws Exception {
+	public void createSecurityUserIfMissing(String namespace, String password) throws Exception {
 		log.info("Check security user...");
 		if(!remoteService.existsSecurityUser(namespace)) {
 			remoteService.createSecurityUser(buildPutUserRequestData(namespace, password));
@@ -98,7 +98,27 @@ public class OzgCloudElasticsearchService {
 		return PutUserRequestData.builder().username(namespace).roles(namespace).password(password).build();
 	}
 	
-	public void deleteIndexIfExists(String name) {
-		
+	public void deleteSecurityUserIfExists(String userName) throws Exception {
+		log.info("Delete security user...");
+		if(remoteService.existsSecurityUser(userName)) {
+			remoteService.deleteSecurityUser(userName);
+		}
+		log.info("Delete security user successful.");
+	}
+	
+	public void deleteSecurityRoleIfExists(String roleName) throws Exception  {
+		log.info("Delete security role...");
+		if(remoteService.existsSecurityRole(roleName)) {
+			remoteService.deleteSecurityRole(roleName);
+		}
+		log.info("Delete security role successful.");
+	}
+
+	public void deleteIndexIfExists(String indexName) throws Exception  {
+		log.info("Delete index role...");
+		if(remoteService.existsIndex(indexName)) {
+			remoteService.deleteIndex(indexName);
+		}
+		log.info("Delete index role successful.");
 	}
 }
\ No newline at end of file
diff --git a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteService.java b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteService.java
index 86a21f2b9f144643a53c739ae77fec53223e6560..9cb768d1fe166a937f82bb812d455a3fb4728bb0 100644
--- a/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteService.java
+++ b/ozgcloud-elasticsearch-operator/src/main/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteService.java
@@ -7,9 +7,6 @@ import org.springframework.stereotype.Component;
 
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import co.elastic.clients.elasticsearch._types.ElasticsearchException;
-import co.elastic.clients.elasticsearch.indices.ExistsRequest;
-import co.elastic.clients.elasticsearch.security.GetRoleRequest;
-import co.elastic.clients.elasticsearch.security.GetUserRequest;
 import co.elastic.clients.elasticsearch.security.IndicesPrivileges;
 import co.elastic.clients.elasticsearch.security.PutRoleRequest;
 import co.elastic.clients.elasticsearch.security.PutUserRequest;
@@ -28,7 +25,7 @@ public class ElasticsearchRemoteService {
 	public boolean existsIndex(String index) throws Exception {
 		try {
 			log.info("Exists index " + index + "...");
-			var exists = client.indices().exists(createExistsRequest(index)).value();
+			var exists = client.indices().exists(builder -> builder.index(index)).value();
 			log.info("Exists index: " + exists);
 			return exists;
 		} catch (ElasticsearchException | IOException e) {
@@ -37,10 +34,6 @@ public class ElasticsearchRemoteService {
 		}
 	}
 	
-	ExistsRequest createExistsRequest(String index) {
-		return ExistsRequest.of(builder -> builder.index(index));
-	}
-	
 	public void createIndex(String indexName) throws Exception {
 		try {
 			log.info("Create index " + indexName + "...");
@@ -53,12 +46,7 @@ public class ElasticsearchRemoteService {
 	}
 	
 	public boolean existsSecurityRole(String roleName) throws Exception {
-		var role = client.security().getRole(createGetRoleRequest(roleName));
-		return !role.result().isEmpty();                  
-	}
-	
-	GetRoleRequest createGetRoleRequest(String name) {
-		return GetRoleRequest.of(builder -> builder.name(name));
+		return !client.security().getRole(builder -> builder.name(roleName)).result().isEmpty();
 	}
 	
 	public void createSecurityRole(PutRoleRequestData requestData) throws Exception {
@@ -91,12 +79,7 @@ public class ElasticsearchRemoteService {
 	}
 		
 	public boolean existsSecurityUser(String userName) throws Exception {
-		var user = client.security().getUser(createGetUserRequest(userName));
-		return !user.result().isEmpty();       
-	}
-	
-	private GetUserRequest createGetUserRequest(String userName) {
-		return GetUserRequest.of(builder -> builder.username(userName));
+		return !client.security().getUser(builder -> builder.username(userName)).result().isEmpty();
 	}
 	
 	public void createSecurityUser(PutUserRequestData requestData) throws Exception {
@@ -121,4 +104,37 @@ public class ElasticsearchRemoteService {
 		
 		return builder;
 	}
+	
+	public void deleteIndex(String indexName) throws Exception {
+		try {
+			log.info("Delete index " + indexName + "...");
+			client.indices().delete(builder -> builder.index(indexName));
+			log.info("Delete index successful.");
+		} catch(Exception e) {
+			log.log(Level.SEVERE, "Delete index failed." + e);
+			throw e;
+		}
+	}
+	
+	public void deleteSecurityRole(String roleName) throws Exception {
+		try {
+			log.info("Delete security role " + roleName + "...");
+			client.security().deleteRole(builder -> builder.name(roleName));
+			log.info("Delete security role successful.");
+		} catch(Exception e) {
+			log.log(Level.SEVERE, "Delete security role failed." + e);
+			throw e;
+		}
+	}
+	
+	public void deleteSecurityUser(String userName) throws Exception {
+		try {
+			log.info("Delete security user " + userName + "...");
+			client.security().deleteUser(builder -> builder.username(userName));
+			log.info("Delete security user successful.");
+		} catch(Exception e) {
+			log.log(Level.SEVERE, "Delete security user failed." + e);
+			throw e;
+		}
+	}
 }
\ No newline at end of file
diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchReconcilerTest.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchReconcilerTest.java
index 033ffdb860c496d419393df5afec31926c2a8c70..9c468aa55c4d298bed506d0a7d6f0ffaf1dce7e4 100644
--- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchReconcilerTest.java
+++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/ElasticsearchReconcilerTest.java
@@ -25,7 +25,7 @@ class ElasticsearchReconcilerTest {
 	@InjectMocks
 	private ElasticsearchReconciler reconciler;
 	@Mock
-	private OzgCloudElasticsearchService searchService;
+	private OzgCloudElasticsearchService service;
 
 	@DisplayName("Reconcile")
 	@Nested
@@ -45,14 +45,14 @@ class ElasticsearchReconcilerTest {
 			
 			@BeforeEach
 			void mockCredentialSecret() {
-				when(searchService.getOrCreateCredentialSecret(any(), any())).thenReturn(secret);
+				when(service.getOrCreateCredentialSecret(any(), any())).thenReturn(secret);
 			}
 			
 			@Test
 			void shouldGetCredentialSecret() {
 				reconcile();
 				
-				verify(searchService).getOrCreateCredentialSecret(resource, context);
+				verify(service).getOrCreateCredentialSecret(resource, context);
 			}
 			
 			@SneakyThrows
@@ -60,7 +60,7 @@ class ElasticsearchReconcilerTest {
 			void shouldCheckIndex() {
 				reconcile();
 				
-				verify(searchService).createIndexIfMissing(NamespaceTestFactory.NAMESPACE);
+				verify(service).createIndexIfMissing(NamespaceTestFactory.NAMESPACE);
 			}
 			
 			@SneakyThrows
@@ -68,7 +68,7 @@ class ElasticsearchReconcilerTest {
 			void shouldCheckSecurityRole() {
 				reconcile();
 				
-				verify(searchService).createSecurityRoleIfMissing(NamespaceTestFactory.NAMESPACE);
+				verify(service).createSecurityRoleIfMissing(NamespaceTestFactory.NAMESPACE);
 			}
 			
 			@SneakyThrows
@@ -76,7 +76,7 @@ class ElasticsearchReconcilerTest {
 			void shouldCheckSecurityUser() {
 				reconcile();
 				
-				verify(searchService).checkSecurityUser(NamespaceTestFactory.NAMESPACE, PASSWORD);
+				verify(service).createSecurityUserIfMissing(NamespaceTestFactory.NAMESPACE, PASSWORD);
 			}
 		}
 		
@@ -88,7 +88,7 @@ class ElasticsearchReconcilerTest {
 			
 			@BeforeEach
 			void mock() {
-				when(searchService.getOrCreateCredentialSecret(any(), any())).thenThrow(exception);
+				when(service.getOrCreateCredentialSecret(any(), any())).thenThrow(exception);
 			}
 			
 			@Test
@@ -155,6 +155,30 @@ class ElasticsearchReconcilerTest {
 		
 		private final OzgCloudElasticsearchCustomResource resource = ElasticsearchCustomResourceTestFactory.create();
 		
+		@SneakyThrows
+		@Test
+		void shouldDeleteSecurityUser() {
+			reconciler.cleanup(resource, context);
+			
+			verify(service).deleteSecurityUserIfExists(NamespaceTestFactory.NAMESPACE);
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteSecurityRole() {
+			reconciler.cleanup(resource, context);
+			
+			verify(service).deleteSecurityRoleIfExists(NamespaceTestFactory.NAMESPACE);
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteIndex() {
+			reconciler.cleanup(resource, context);
+			
+			verify(service).deleteIndexIfExists(NamespaceTestFactory.NAMESPACE);
+		}
+		
 		@Test
 		void shouldReturnDeleteControl(){
 			var deleteControl = reconciler.cleanup(resource, context);
diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java
index 88be60a5c1c5469f95c3fd6a0046044ec9b115eb..b560cba92af7cf74712fe6296dd82b6f76c6f6c5 100644
--- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java
+++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/OzgCloudElasticsearchServiceTest.java
@@ -200,7 +200,7 @@ class OzgCloudElasticsearchServiceTest {
 		@SneakyThrows
 		@Test
 		void shouldCheckIfSecurityUserExists() {
-			service.checkSecurityUser(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD);
+			service.createSecurityUserIfMissing(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD);
 			
 			verify(remoteService).existsSecurityUser(NAMESPACE);
 		}
@@ -211,7 +211,7 @@ class OzgCloudElasticsearchServiceTest {
 			when(remoteService.existsSecurityUser(any())).thenReturn(false);
 			doReturn(putUserRequestData).when(service).buildPutUserRequestData(any(), any());
 			
-			service.checkSecurityUser(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD);
+			service.createSecurityUserIfMissing(NAMESPACE, PutUserRequestDataTestFactory.PASSWORD);
 			
 			verify(remoteService).createSecurityUser(putUserRequestData);
 		}
@@ -246,4 +246,75 @@ class OzgCloudElasticsearchServiceTest {
 			}
 		}
 	}
+	
+	@DisplayName("Delete security user if exists")
+	@Nested
+	class TestDeleteSecurityUserIfExists {
+		
+		@SneakyThrows
+		@Test
+		void shouldCheckIfSecurityUserExists() {
+			service.deleteSecurityUserIfExists(PutUserRequestDataTestFactory.USERNAME);
+			
+			verify(remoteService).existsSecurityUser(PutUserRequestDataTestFactory.USERNAME);
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteSecurityUserIfExists() {
+			when(remoteService.existsSecurityUser(any())).thenReturn(true);
+			
+			service.deleteSecurityUserIfExists(PutUserRequestDataTestFactory.USERNAME);
+			
+			verify(remoteService).deleteSecurityUser(PutUserRequestDataTestFactory.USERNAME);
+		}
+	}
+	
+	@DisplayName("Delete security role if exists")
+	@Nested
+	class TestDeleteSecurityRoleIfExists {
+		
+		@SneakyThrows
+		@Test
+		void shouldCheckIfSecurityRoleExists() {
+			service.deleteSecurityRoleIfExists(PutRoleRequestDataTestFactory.NAME);
+			
+			verify(remoteService).existsSecurityRole(PutRoleRequestDataTestFactory.NAME);
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteSecurityRoleIfExists() {
+			when(remoteService.existsSecurityRole(any())).thenReturn(true);
+			
+			service.deleteSecurityRoleIfExists(PutRoleRequestDataTestFactory.NAME);
+			
+			verify(remoteService).deleteSecurityRole(PutRoleRequestDataTestFactory.NAME);
+		}
+	}
+	
+	@DisplayName("Delete index if exists")
+	@Nested
+	class TestDeleteIndexIfExists {
+		
+		private static final String INDEX_NAME = NamespaceTestFactory.NAMESPACE;
+		
+		@SneakyThrows
+		@Test
+		void shouldCheckIfIndexExists() {
+			service.deleteIndexIfExists(INDEX_NAME);
+			
+			verify(remoteService).existsIndex(INDEX_NAME);
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteSecurityRoleIfExists() {
+			when(remoteService.existsIndex(any())).thenReturn(true);
+			
+			service.deleteIndexIfExists(INDEX_NAME);
+			
+			verify(remoteService).deleteIndex(INDEX_NAME);
+		}
+	}
 }
\ No newline at end of file
diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceITCase.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceITCase.java
index db47f4c02addcf9b2abb334818210b036dd1d68c..5ac49af8471222eff42202a3ec63a15a14cd579a 100644
--- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceITCase.java
+++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceITCase.java
@@ -11,12 +11,11 @@ import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
-import co.elastic.clients.elasticsearch.indices.DeleteIndexRequest;
 import co.elastic.clients.elasticsearch.indices.ExistsRequest;
-import co.elastic.clients.elasticsearch.security.DeleteRoleRequest;
-import co.elastic.clients.elasticsearch.security.DeleteUserRequest;
-import co.elastic.clients.elasticsearch.security.GetRoleRequest;
-import co.elastic.clients.elasticsearch.security.GetUserRequest;
+import co.elastic.clients.elasticsearch.security.IndicesPrivileges;
+import co.elastic.clients.elasticsearch.security.PutRoleRequest;
+import co.elastic.clients.elasticsearch.security.PutUserRequest;
+import de.ozgcloud.operator.IndicesPrivilegesDataTestFactory;
 import de.ozgcloud.operator.PutRoleRequestDataTestFactory;
 import de.ozgcloud.operator.PutUserRequestDataTestFactory;
 import lombok.SneakyThrows;
@@ -91,16 +90,6 @@ class ElasticsearchRemoteServiceITCase {
 			
 			assertThat(existsIndex()).isTrue();
 		}
-		
-		@SneakyThrows
-		private boolean existsIndex() {
-			return client.indices().exists(ExistsRequest.of(builder -> builder.index(INDEX_NAME))).value();
-		}
-	}
-	
-	@SneakyThrows
-	private void deleteIndex() {
-		client.indices().delete(DeleteIndexRequest.of(builder -> builder.index(INDEX_NAME)));
 	}
 	
 	@DisplayName("Exists security role")
@@ -158,15 +147,9 @@ class ElasticsearchRemoteServiceITCase {
 			assertThat(existsSecurityRole()).isTrue();
 		}
 		
-		@SneakyThrows
-		private boolean existsSecurityRole() {
-			var role = client.security().getRole(GetRoleRequest.of(builder -> builder.name(PutRoleRequestDataTestFactory.NAME)));
-			return !role.result().isEmpty();
-		}
-		
 		@SneakyThrows
 		private void deleteSecurityRole() {
-			client.security().deleteRole(DeleteRoleRequest.of(builder -> builder.name(PutRoleRequestDataTestFactory.NAME)));
+			client.security().deleteRole(builder -> builder.name(PutRoleRequestDataTestFactory.NAME));
 		}
 	}
 	
@@ -188,6 +171,7 @@ class ElasticsearchRemoteServiceITCase {
 			@AfterEach
 			void cleanup() {
 				deleteIndex();
+				deleteSecurityRole();
 			}
 			
 			@SneakyThrows
@@ -209,8 +193,12 @@ class ElasticsearchRemoteServiceITCase {
 	}
 	
 	@SneakyThrows
-	private void createIndex() {
-		client.indices().create(builder -> builder.index(INDEX_NAME));
+	private void deleteSecurityRole() {
+		client.security().deleteUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME));
+	}
+	@SneakyThrows
+	private void deleteIndex() {
+		client.indices().delete(builder -> builder.index(INDEX_NAME));
 	}
 	
 	@DisplayName("Create security user")
@@ -232,13 +220,133 @@ class ElasticsearchRemoteServiceITCase {
 		
 		@SneakyThrows
 		private boolean existsSecurityUser() {
-			var user = client.security().getUser(GetUserRequest.of(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME)));
-			return !user.result().isEmpty();     
+			return !client.security().getUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME)).result().isEmpty();
 		}
 		
 		@SneakyThrows
 		private void deleteSecurityUser() {
-			client.security().deleteUser(DeleteUserRequest.of(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME)));
+			client.security().deleteUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME));
+		}
+	}
+	
+	@DisplayName("Delete index")
+	@Nested
+	class TestDeleteIndex {
+		
+		@BeforeEach
+		void init() {
+			createIndex();
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteIfExists() {			
+			service.deleteIndex(INDEX_NAME);
+			
+			assertThat(existsIndex()).isFalse();
+		}
+	}
+	
+	@DisplayName("Delete security role")
+	@Nested
+	class TestDeleteSecurityRole {
+		
+		@BeforeEach
+		void init() {
+			createIndex();
+			createSecurityRole();
+		}
+		
+		@AfterEach
+		void cleanup() {
+			deleteIndex();
 		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteIfExists() {
+			assertThat(existsSecurityRole()).isTrue();
+			
+			service.deleteSecurityRole(PutRoleRequestDataTestFactory.NAME);
+			
+			assertThat(existsSecurityRole()).isFalse();
+		}
+	}
+	
+	@DisplayName("Delete security user")
+	@Nested
+	class TestDeleteSecurityUser {
+		
+		@BeforeEach
+		void init() {
+			createIndex();
+			createSecurityUser();
+		}
+		
+		@AfterEach
+		void cleanup() {
+			deleteIndex();
+		}
+		
+		@SneakyThrows
+		@Test
+		void shouldDeleteIfExists() {
+			assertThat(existsSecurityUser()).isTrue();
+			
+			service.deleteSecurityUser(PutUserRequestDataTestFactory.USERNAME);
+			
+			assertThat(existsSecurityUser()).isFalse();
+		}
+	}
+	
+	@SneakyThrows
+	private boolean existsIndex() {
+		return client.indices().exists(ExistsRequest.of(builder -> builder.index(INDEX_NAME))).value();
+	}
+	
+	@SneakyThrows
+	private void createIndex() {
+		client.indices().create(builder -> builder.index(INDEX_NAME));
+	}
+	
+	@SneakyThrows
+	private void createSecurityRole() {
+		client.security().putRole(this::buildRequest);
+	}
+	
+	private PutRoleRequest.Builder buildRequest(PutRoleRequest.Builder requestBuilder) {
+		requestBuilder.name(PutRoleRequestDataTestFactory.NAME);
+		requestBuilder.indices(this::buildIndicesPrivilegesRequest);
+		return requestBuilder;
+	}
+	
+	private IndicesPrivileges.Builder buildIndicesPrivilegesRequest(IndicesPrivileges.Builder builder) {
+		builder.names(IndicesPrivilegesDataTestFactory.NAME);
+		builder.privileges(IndicesPrivilegesDataTestFactory.PRIVILEGES);
+		
+		return builder;
+	}
+	
+	@SneakyThrows
+	private boolean existsSecurityRole() {
+		return !client.security().getRole(builder -> builder.name(PutRoleRequestDataTestFactory.NAME)).result().isEmpty();
+	}
+	
+	@SneakyThrows
+	private void createSecurityUser() {
+		client.security().putUser(this::buildPutUserRequest);
+	}
+	
+	private PutUserRequest.Builder buildPutUserRequest(PutUserRequest.Builder builder) {
+		builder.username(PutUserRequestDataTestFactory.USERNAME);
+		builder.roles(PutUserRequestDataTestFactory.ROLES);
+		builder.password(PutUserRequestDataTestFactory.PASSWORD);
+		
+		return builder;
+	}
+	
+	@SneakyThrows
+	private boolean existsSecurityUser() {
+		return !client.security().getUser(builder -> builder.username(PutUserRequestDataTestFactory.USERNAME)).result().isEmpty();
 	}
 }
\ No newline at end of file
diff --git a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceTest.java b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceTest.java
index b095c72ea381d25fc67f21d6f1eb1ccef5944b88..f7fdc948bc05d4eb5d147e6e39f257f6acb456e5 100644
--- a/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceTest.java
+++ b/ozgcloud-elasticsearch-operator/src/test/java/de/ozgcloud/operator/common/elasticsearch/ElasticsearchRemoteServiceTest.java
@@ -9,8 +9,6 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
-import com.thedeanda.lorem.LoremIpsum;
-
 import co.elastic.clients.elasticsearch.ElasticsearchClient;
 import de.ozgcloud.operator.IndicesPrivilegesDataTestFactory;
 import de.ozgcloud.operator.PutRoleRequestDataTestFactory;
@@ -24,39 +22,6 @@ class ElasticsearchRemoteServiceTest {
 	@Mock
 	private ElasticsearchClient client;
 	
-	@DisplayName("Create security role")
-	@Nested
-	class TestCreateIndex {
-		
-		@DisplayName("create exists request")
-		@Nested
-		class TestCreateExistsRequest {
-			
-			private static final String INDEX = LoremIpsum.getInstance().getFirstName();
-			
-			@Test
-			void shouldHaveIndex() {
-				var request = service.createExistsRequest(INDEX);
-				
-				assertThat(request.index()).containsExactly(INDEX);
-			}
-		}
-	}
-	
-	@DisplayName("Create get role request")
-	@Nested
-	class TestCreateGetRoleRequest {
-		
-		private static final String NAME = LoremIpsum.getInstance().getFirstName();
-			
-		@Test
-		void shouldHaveName() {
-			var request = service.createGetRoleRequest(NAME);
-			
-			assertThat(request.name()).containsExactly(NAME);
-		}
-	}
-	
 	@DisplayName("Create security role")
 	@Nested
 	class TestCreateSecurityRole {