diff --git a/src/service/service/service_handlers/l3slice_ietfslice/L3SliceIETFSliceServiceHandler.py b/src/service/service/service_handlers/l3slice_ietfslice/L3SliceIETFSliceServiceHandler.py
index 6a63201bb3dc822a02d67fad2391c03f1fb1f868..258ea27f05ca27e544c26a0b0fe8f8ddf6692933 100644
--- a/src/service/service/service_handlers/l3slice_ietfslice/L3SliceIETFSliceServiceHandler.py
+++ b/src/service/service/service_handlers/l3slice_ietfslice/L3SliceIETFSliceServiceHandler.py
@@ -77,6 +77,77 @@ METRICS_POOL = MetricsPool(
 RAISE_IF_DIFFERS = True
 
 
+def get_removed_items(
+    candidate_ietf_slice_dict: dict, running_ietf_slice_dict: dict
+) -> dict:
+    removed_items = {
+        "sdp": {"sdp_idx": None, "value": {}},
+        "connection_group": {"connection_group_idx": None, "value": {}},
+        "match_criterion": {
+            "sdp_idx": None,
+            "match_criterion_idx": None,
+            "value": {},
+        },
+    }
+    running_slice_services = running_ietf_slice_dict["network-slice-services"][
+        "slice-service"
+    ][0]
+    running_slice_sdps = [sdp["id"] for sdp in running_slice_services["sdps"]["sdp"]]
+    candidate_slice_services = candidate_ietf_slice_dict["network-slice-services"][
+        "slice-service"
+    ][0]
+    candidiate_slice_sdps = [
+        sdp["id"] for sdp in candidate_slice_services["sdps"]["sdp"]
+    ]
+    removed_sdps = set(running_slice_sdps) - set(candidiate_slice_sdps)
+    if len(removed_sdps) > 1:
+        raise Exception("Multiple SDPs removed")
+    removed_sdp_id = list(removed_sdps)[0]
+    removed_items["sdp"]["sdp_idx"] = running_slice_sdps.index(removed_sdp_id)
+    removed_items["sdp"]["value"] = next(
+        sdp
+        for sdp in running_slice_services["sdps"]["sdp"]
+        if sdp["id"] == removed_sdp_id
+    )
+
+    match_criteria = removed_items["sdp"]["value"]["service-match-criteria"][
+        "match-criterion"
+    ]
+    if len(match_criteria) > 1:
+        raise Exception("Multiple match criteria found")
+    match_criterion = match_criteria[0]
+    connection_grp_id = match_criterion["target-connection-group-id"]
+    connection_groups = running_slice_services["connection-groups"]["connection-group"]
+    connection_group = next(
+        (idx, cg)
+        for idx, cg in enumerate(connection_groups)
+        if cg["id"] == connection_grp_id
+    )
+    removed_items["connection_group"]["connection_group_idx"] = connection_group[0]
+    removed_items["connection_group"]["value"] = connection_group[1]
+    for sdp in running_slice_services["sdps"]["sdp"]:
+        if sdp["id"] == removed_sdp_id:
+            continue
+        for mc in sdp["service-match-criteria"]["match-criterion"]:
+            if mc["target-connection-group-id"] == connection_grp_id:
+                removed_items["match_criterion"]["sdp_idx"] = running_slice_sdps.index(
+                    sdp["id"]
+                )
+                removed_items["match_criterion"]["match_criterion_idx"] = sdp[
+                    "service-match-criteria"
+                ]["match-criterion"].index(mc)
+                removed_items["match_criterion"]["value"] = mc
+                break
+
+    if (
+        removed_items["match_criterion"]["sdp_idx"] is None
+        or removed_items["sdp"]["sdp_idx"] is None
+        or removed_items["connection_group"]["connection_group_idx"] is None
+    ):
+        raise Exception("sdp, connection group or match criterion not found")
+    return removed_items
+
+
 def extract_source_destination_device_endpoint_info(
     device_ep_pairs: list, connection_group: Dict
 ) -> Tuple[DeviceEpInfo, DeviceEpInfo]:
@@ -224,8 +295,11 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
                 slice_services = candidate_resource_value_dict[
                     "network-slice-services"
                 ]["slice-service"]
-                slice_service = slice_services[0]
-                sdps = slice_service["sdps"]["sdp"]
+                candidate_slice_service = slice_services[0]
+                full_connection_groups = candidate_slice_service["connection-groups"][
+                    "connection-group"
+                ]
+                sdps = candidate_slice_service["sdps"]["sdp"]
                 operation_type = "create"
                 sdp_ids = [sdp["node-id"] for sdp in sdps]
                 for sdp in sdps:
@@ -316,8 +390,11 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
                 slice_services = candidate_resource_value_dict[
                     "network-slice-services"
                 ]["slice-service"]
-                slice_service = slice_services[0]
-                sdps = slice_service["sdps"]["sdp"]
+                candidate_slice_service = slice_services[0]
+                full_connection_groups = candidate_slice_service["connection-groups"][
+                    "connection-group"
+                ]
+                sdps = candidate_slice_service["sdps"]["sdp"]
                 operation_type = "update"
                 added_items = {
                     "sdp": {"sdp_idx": None, "value": {}},
@@ -457,44 +534,19 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
                 slice_services = running_resource_value_dict["network-slice-services"][
                     "slice-service"
                 ]
+                candidate_slice_services = candidate_resource_value_dict[
+                    "network-slice-services"
+                ]["slice-service"]
+                candidate_slice_service = candidate_slice_services[0]
                 slice_service = slice_services[0]
+                full_connection_groups = slice_service["connection-groups"][
+                    "connection-group"
+                ]
                 sdps = slice_service["sdps"]["sdp"]
                 operation_type = "update"
-                removed_items = {
-                    "sdp": {"sdp_idx": None, "value": {}},
-                    "connection_group": {"connection_group_idx": None, "value": {}},
-                    "match_criterion": {
-                        "sdp_idx": None,
-                        "match_criterion_idx": None,
-                        "value": {},
-                    },
-                }
-                for added_key, added_value in running_candidate_diff[
-                    "iterable_item_removed"
-                ].items():
-                    sdp_match = SDP_DIFF_RE.match(added_key)
-                    connection_group_match = CONNECTION_GROUP_DIFF_RE.match(added_key)
-                    match_criterion_match = MATCH_CRITERION_DIFF_RE.match(added_key)
-                    if sdp_match:
-                        removed_items["sdp"] = {
-                            "sdp_idx": int(sdp_match.groups()[0]),
-                            "value": added_value,
-                        }
-                    elif connection_group_match:
-                        removed_items["connection_group"] = {
-                            "connection_group_idx": int(
-                                connection_group_match.groups()[0]
-                            ),
-                            "value": added_value,
-                        }
-                    elif match_criterion_match:
-                        removed_items["match_criterion"] = {
-                            "sdp_idx": int(match_criterion_match.groups()[0]),
-                            "match_criterion_idx": int(
-                                match_criterion_match.groups()[1]
-                            ),
-                            "value": added_value,
-                        }
+                removed_items = get_removed_items(
+                    candidate_resource_value_dict, running_resource_value_dict
+                )
                 new_sdp = sdps[removed_items["sdp"]["sdp_idx"]]
                 src_sdp_name = new_sdp["node-id"]
                 dst_sdp_idx = sdps[removed_items["match_criterion"]["sdp_idx"]]["id"]
@@ -594,8 +646,11 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
                         break
                 else:
                     raise Exception("sdp between the domains not found")
-            connection_groups = slice_service["connection-groups"]["connection-group"]
-            for cg in connection_groups:
+            candidate_connection_groups = candidate_slice_service["connection-groups"][
+                "connection-group"
+            ]
+            LOGGER.debug(f"connection_groups: {candidate_connection_groups}")
+            for cg in candidate_connection_groups:
                 for cc in cg["connectivity-construct"]:
                     for metric_bound in cc["service-slo-sle-policy"]["slo-policy"][
                         "metric-bound"
@@ -633,7 +688,9 @@ class L3NMSliceIETFSliceServiceHandler(_ServiceHandler):
             ):
                 operation_type = "delete"
             target_connection_group = next(
-                cg for cg in connection_groups if cg["id"] == target_connection_group_id
+                cg
+                for cg in full_connection_groups
+                if cg["id"] == target_connection_group_id
             )
             source_device_ep_info, destination_device_ep_info = (
                 extract_source_destination_device_endpoint_info(