diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java
index 53e57ffed8c03c1406bc0ecdd4c877b35873aed9..d61b07f4764ea4d83949d2101a2e5ca817731c0b 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/KeycloakGenericRemoteService.java
@@ -4,6 +4,7 @@ import java.util.Objects;
 import java.util.Optional;
 
 import org.keycloak.admin.client.Keycloak;
+import org.keycloak.admin.client.resource.RealmResource;
 import org.keycloak.representations.idm.ClientRepresentation;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.representations.idm.RoleRepresentation;
@@ -42,4 +43,7 @@ public class KeycloakGenericRemoteService {
 				.stream().filter(role -> Objects.equals(roleName, role.getName()))
 				.findFirst();
 	}
+	public Optional<RealmResource> getRealm(String realm) {
+		return Optional.ofNullable(keycloak.realm(realm)).findFirst();
+	}
 }
diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
index a77787354e95b4e222af5ced2f2fc2bcfb868825..c5615868a13b372a9d1cb5de5adbb821b876c892 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmReconciler.java
@@ -51,6 +51,7 @@ public class KeycloakRealmReconciler implements Reconciler<OzgCloudKeycloakRealm
 			var realmName = resource.getMetadata().getNamespace();
 
 			service.createRealm(resource.getSpec(), realmName);
+			service.createOrUpdateClient(resource.getSpec(), resource.getMetadata().getNamespace());
 
 			resource.setStatus(OzgCloudKeycloakRealmStatus.builder().status(OzgCloudCustomResourceStatus.OK).message(null).build());
 			return UpdateControl.updateStatus(resource);
diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java
index 2e291ab5f7c0d43ab85da9c911ef36a992165a85..ddac507d2642bf17021686e2a775c5cdab69f312 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmRemoteService.java
@@ -27,6 +27,7 @@ import java.util.Objects;
 import java.util.Optional;
 
 import org.keycloak.admin.client.Keycloak;
+import org.keycloak.admin.client.resource.RealmResource;
 import org.keycloak.representations.idm.RealmRepresentation;
 import org.keycloak.representations.idm.RoleRepresentation;
 import org.springframework.stereotype.Component;
@@ -47,4 +48,6 @@ class KeycloakRealmRemoteService {
 	public void deleteRealm(String realmName) {
 		keycloak.realm(realmName).remove();
 	}
+
+	
 }
diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java
index 279a05573ba927a7b84b4f76166785b1fb2641e1..4ecfa1642b38d60621a103cb837090395abdd7dd 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/realm/KeycloakRealmService.java
@@ -49,11 +49,36 @@ class KeycloakRealmService {
 				.ifPresent(remoteService::createRealm);
 	}
 
+	void createOrUpdateRealm(OzgCloudKeycloakRealmSpec spec, String realmName) {
+		keycloakGenericRemoteService.getRealm(realmName)
+				.ifPresentOrElse(existingRealm -> updateRealm(existingRealm, spec, namespace),
+						() -> createRealm(spec, namespace));
+	}
+
+	void createOrUpdateClient(OzgCloudKeycloakClientSpec spec, String namespace) {
+		genericRemoteService.getByClientId(spec.getClientId(), namespace)
+				.ifPresentOrElse(existingClient -> updateClient(existingClient, spec, namespace),
+						() -> createClient(spec, namespace));
+	}
+
+	void updateClient(ClientRepresentation existingClient, OzgCloudKeycloakClientSpec spec, String realm) {
+		var clientRepresentation = mapper.update(existingClient, spec);
+		setProtocolMapper(clientRepresentation);
+		remoteService.updateClient(clientRepresentation, realm);
+
+		addOrUpdateClientRoles(spec, realm, existingClient.getId());
+	}
+
+
 	RealmRepresentation addRealmName(RealmRepresentation realm, String realmName) {
 		realm.setRealm(realmName);
 		return realm;
 	}
 
+	String getRealmName(RealmRepresentation realm) {
+		return realm.getRealm();
+	}
+
 	public void deleteRealm(String realmName) {
 		remoteService.deleteRealm(realmName);
 	}