diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
index 3af4f3a8dea133999451b3c39bb5e57f04670078..c7172554d92ec46833d3239c992b5c2c13587268 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyRuleConditionValidator.java
@@ -18,9 +18,12 @@ package eu.teraflow.policy;
 
 import eu.teraflow.policy.context.ContextService;
 import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.Service;
 import eu.teraflow.policy.context.model.ServiceId;
 import io.smallrye.mutiny.Uni;
+import java.util.ArrayList;
+import java.util.List;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import org.jboss.logging.Logger;
@@ -114,6 +117,22 @@ public class PolicyRuleConditionValidator {
                 && serviceServiceIdId.equals(serviceId.getId());
     }
 
+    public Uni<Boolean> isServicesDeviceIdsValid(ServiceId serviceId, List<String> deviceIds) {
+        return contextService
+                .getService(serviceId)
+                .onItem()
+                .transform(service -> checkIfServicesDeviceIdsExist(service, deviceIds));
+    }
+
+    private boolean checkIfServicesDeviceIdsExist(Service service, List<String> deviceIds) {
+        List<String> serviceDeviceIds = new ArrayList<>();
+        for (EndPointId serviceEndPointId : service.getServiceEndPointIds()) {
+            serviceDeviceIds.add(serviceEndPointId.getDeviceId());
+        }
+
+        return deviceIds.containsAll(serviceDeviceIds);
+    }
+
     private Uni<Boolean> isUpdatedPolicyRuleIdValid(String updatedPolicyRuleId) {
         return contextService
                 .getPolicyRule(updatedPolicyRuleId)
diff --git a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
index a45a4bc28846895f77a44dbfb7260170fdb94b79..b2da70d89408a97b558669accd942adfaf3e1406 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/PolicyServiceImpl.java
@@ -541,57 +541,48 @@ public class PolicyServiceImpl implements PolicyService {
         final var deviceIds = policyRuleService.getDeviceIds();
         final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
 
-        final var isServiceIdValid = policyRuleConditionValidator.validateServiceId(serviceId);
-
-        isServiceIdValid
-                .subscribe()
-                .with(
-                        serviceIdBooleanValue -> {
-                            if (Boolean.FALSE.equals(serviceIdBooleanValue)) {
-                                LOGGER.errorf(INVALID_MESSAGE, serviceId);
-                                final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-                                if (invalidDeviceIds.isEmpty()) {
-                                    LOGGER.info("All Device Ids are valid.");
-                                }
-                                var policyRuleState =
-                                        createFailedPolicyRuleState(
-                                                "The Service of PolicyRuleService "
-                                                        + policyRuleBasic.getPolicyRuleId()
-                                                        + " is not valid");
-                                LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-                                policyRuleBasic.setPolicyRuleState(policyRuleState);
-                                contextService.setPolicyRule(policyRuleBasic);
-                                return;
-                            } else {
-                                LOGGER.infof(VALID_MESSAGE, serviceId);
-
-                                final var invalidDeviceIds = returnInvalidDeviceIds(deviceIds);
-
-                                if (!invalidDeviceIds.isEmpty()) {
-                                    var policyRuleState =
-                                            createFailedPolicyRuleState(
-                                                    "The Devices of PolicyRuleService "
-                                                            + policyRuleBasic.getPolicyRuleId()
-                                                            + " are not valid");
-                                    LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
-                                    policyRuleBasic.setPolicyRuleState(policyRuleState);
-                                    contextService.setPolicyRule(policyRuleBasic);
-                                    return;
-                                } else {
-                                    LOGGER.infof("All deviceIds are valid");
-                                }
+        Boolean isServiceIdValid =
+                policyRuleConditionValidator.validateServiceId(serviceId).await().indefinitely();
+        if (!isServiceIdValid) {
+            LOGGER.errorf(INVALID_MESSAGE, serviceId);
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The Service of PolicyRuleService "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " is not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
+            contextService.setPolicyRule(policyRuleBasic);
+            return;
+        }
 
-                                policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
-                                contextService.setPolicyRule(policyRuleBasic);
-                                return;
-                            }
-                        });
+        Boolean isServicesDeviceIdsValid =
+                policyRuleConditionValidator
+                        .isServicesDeviceIdsValid(serviceId, deviceIds)
+                        .await()
+                        .indefinitely();
 
-        if (policyRuleBasic.getPolicyRuleState() != VALIDATED_POLICYRULE_STATE) {
+        if (!isServicesDeviceIdsValid) {
+            var policyRuleState =
+                    createFailedPolicyRuleState(
+                            "The Devices of PolicyRuleService "
+                                    + policyRuleBasic.getPolicyRuleId()
+                                    + " are not valid");
+            LOGGER.infof("Setting Policy Rule state to [%s]", policyRuleState.toString());
+            policyRuleBasic.setPolicyRuleState(policyRuleState);
+            contextService.setPolicyRule(policyRuleBasic);
             return;
         }
 
+        policyRuleBasic.setPolicyRuleState(VALIDATED_POLICYRULE_STATE);
+        contextService.setPolicyRule(policyRuleBasic);
+        
+        createAlarmDescriptors(policyRuleService);
+    }
+
+    private void createAlarmDescriptors(PolicyRuleService policyRuleService) {
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+
         List<AlarmDescriptor> alarmDescriptorList =
                 parsePolicyRuleCondition(policyRuleService.getPolicyRuleBasic());