diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java
index a2a19c68883187f986ebc18e7e1b912a5bd563c4..4e92bd3640450d3765176046aced08900e257a79 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java
@@ -41,7 +41,7 @@ class KeycloakUserPreconditionService {
 	public Optional<String> getPreconditionErrors(OzgCloudKeycloakUser user) {
 		var namespace = user.getMetadata().getNamespace();
 
-		if (!keycloakGenericRemoteService.realmExists(namespace)) {
+		if (!realmExists(namespace)) {
 			return Optional.of(String.format("Realm %s does not yet exist", namespace));
 		}
 
@@ -58,6 +58,10 @@ class KeycloakUserPreconditionService {
 		return Optional.empty();
 	}
 
+	boolean realmExists(String realmName) {
+		return keycloakGenericRemoteService.realmExists(realmName);
+	}
+
 	Optional<String> clientsExists(OzgCloudKeycloakUser user, String realm) {
 		return user.getSpec().getKeycloakUser().getClientRoles().stream()
 				.map(KeycloakUserSpecClientRole::getClientId)
diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java
index 6d157e2ddd8d61ae3a2cad45029659417d62a7f9..108dbd6e7a35d1aa8739d4a2c39a9514f724c960 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconciler.java
@@ -88,6 +88,11 @@ public class KeycloakUserReconciler implements Reconciler<OzgCloudKeycloakUser>,
 			LOG.info("keep data");
 			return DeleteControl.defaultDelete();
 		}
+
+		if (!preconditionService.realmExists(user.getMetadata().getNamespace())) {
+			return DeleteControl.defaultDelete();
+		}
+
 		return deleteUser(user);
 	}
 
diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java
index f8088d59e805b0419cbef1588af4ee1e936f8b1a..1800a5a8d2d84a9e76f61d80d64288b08f024a8d 100644
--- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java
+++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java
@@ -44,6 +44,8 @@ import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService;
 
 class KeycloakUserPreconditionServiceTest {
 
+	private String REALM = OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE;
+
 	@Spy
 	@InjectMocks
 	private KeycloakUserPreconditionService service;
@@ -70,9 +72,18 @@ class KeycloakUserPreconditionServiceTest {
 			verify(keycloakGenericRemoteService).realmExists(OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE);
 		}
 
+		@Test
+		void shouldReturnResponseFromRealmExists() {
+			when(service.realmExists(REALM)).thenReturn(true);
+
+			var response = service.getPreconditionErrors(OzgCloudKeycloakUserTestFactory.create());
+
+			assertThat(response).isPresent();
+		}
+
 		@Test
 		void shouldReturnErrorIfRealmNotExists() {
-			doReturn(false).when(keycloakGenericRemoteService).realmExists(anyString());
+			doReturn(false).when(service).realmExists(REALM);
 
 			var response = service.getPreconditionErrors(OzgCloudKeycloakUserTestFactory.create());
 
@@ -113,6 +124,26 @@ class KeycloakUserPreconditionServiceTest {
 		}
 	}
 
+	@Nested
+	class TestRealmExists {
+
+		@Test
+		void shouleCallRemoteService() {
+			service.realmExists(REALM);
+
+			verify(keycloakGenericRemoteService).realmExists(REALM);
+		}
+
+		@Test
+		void shouldReturnResponseFromRemoteService() {
+			when(keycloakGenericRemoteService.realmExists(REALM)).thenReturn(true);
+
+			var response = service.realmExists(REALM);
+
+			assertThat(response).isTrue();
+		}
+	}
+
 	@Nested
 	class TestClientExists {
 
diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java
index b96bcf8cb8d50dad6f763130a8dd3415b7f2e021..311a2e8ca95512fc2162c768d8b27ea912d95648 100644
--- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java
+++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserReconcilerTest.java
@@ -45,6 +45,8 @@ import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
 
 class KeycloakUserReconcilerTest {
 
+	private final String REALM = OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE;
+
 	@Spy
 	@InjectMocks
 	private KeycloakUserReconciler reconciler;
@@ -134,6 +136,8 @@ class KeycloakUserReconcilerTest {
 
 			@Test
 			void shouldCallDeleteUser() {
+				when(preconditionService.realmExists(REALM)).thenReturn(true);
+
 				reconciler.cleanup(user, null);
 
 				verify(reconciler).deleteUser(user);
@@ -143,11 +147,37 @@ class KeycloakUserReconcilerTest {
 			void shouldReturnValueFromDeleteUser() {
 				DeleteControl expected = DeleteControl.defaultDelete();
 				when(reconciler.deleteUser(user)).thenReturn(expected);
+				when(preconditionService.realmExists(REALM)).thenReturn(true);
 
 				DeleteControl response = reconciler.cleanup(user, null);
 
 				assertThat(response).isEqualTo(expected);
 			}
+
+			@Test
+			void shouldCallRealmExists() {
+				reconciler.cleanup(user, null);
+
+				verify(preconditionService).realmExists(REALM);
+			}
+
+			@Test
+			void shouldDeleteUserIfRealmExists() {
+				when(preconditionService.realmExists(REALM)).thenReturn(true);
+
+				reconciler.cleanup(user, null);
+
+				verify(reconciler).deleteUser(user);
+			}
+
+			@Test
+			void shouldNotDeleteUserIfRealmNotExists() {
+				when(preconditionService.realmExists(REALM)).thenReturn(false);
+
+				reconciler.cleanup(user, null);
+
+				verify(reconciler, never()).deleteUser(user);
+			}
 		}
 
 		@DisplayName("test delete")
@@ -172,6 +202,7 @@ class KeycloakUserReconcilerTest {
 
 			@Test
 			void shouldRescheduleOnError() {
+				when(preconditionService.realmExists(REALM)).thenReturn(true);
 				doThrow(RuntimeException.class).when(service)
 						.deleteUser(user.getSpec(), OzgCloudKeycloakRealmTestFactory.METADATA_NAMESPACE);