diff --git a/charms/kfp-api/src/charm.py b/charms/kfp-api/src/charm.py
index 15da2061..3d8002d8 100755
--- a/charms/kfp-api/src/charm.py
+++ b/charms/kfp-api/src/charm.py
@@ -11,8 +11,10 @@
 from pathlib import Path
 
 from charmed_kubeflow_chisme.exceptions import ErrorWithStatus, GenericCharmRuntimeError
-from charmed_kubeflow_chisme.kubernetes import KubernetesResourceHandler
-from charmed_kubeflow_chisme.lightkube.batch import delete_many
+from charmed_kubeflow_chisme.kubernetes import (
+    KubernetesResourceHandler,
+    create_charm_default_labels,
+)
 from charmed_kubeflow_chisme.pebble import update_layer
 from charms.data_platform_libs.v0.data_interfaces import DatabaseRequires
 from charms.observability_libs.v1.kubernetes_service_patch import KubernetesServicePatch
@@ -21,6 +23,8 @@
 from lightkube import ApiError
 from lightkube.generic_resource import load_in_cluster_generic_resources
 from lightkube.models.core_v1 import ServicePort
+from lightkube.resources.core_v1 import Service, ServiceAccount
+from lightkube.resources.rbac_authorization_v1 import ClusterRole, ClusterRoleBinding
 from ops.charm import CharmBase
 from ops.main import main
 from ops.model import ActiveStatus, BlockedStatus, MaintenanceStatus, ModelError, WaitingStatus
@@ -142,6 +146,15 @@ def __init__(self, *args):
             ],
         )
 
+    @property
+    def _charm_default_kubernetes_labels(self):
+        """Return default labels for Kubernetes resources."""
+        return create_charm_default_labels(
+            application_name=self.model.app.name,
+            model_name=self.model.name,
+            scope="all-resources",
+        )
+
     @property
     def container(self):
         """Return container."""
@@ -156,6 +169,8 @@ def k8s_resource_handler(self):
                 template_files=K8S_RESOURCE_FILES,
                 context=self._context,
                 logger=self.logger,
+                labels=self._charm_default_kubernetes_labels,
+                resource_types={Service, ServiceAccount, ClusterRole, ClusterRoleBinding},
             )
         load_in_cluster_generic_resources(self._k8s_resource_handler.lightkube_client)
         return self._k8s_resource_handler
@@ -554,14 +569,20 @@ def _on_upgrade(self, _):
     def _on_remove(self, _):
         """Remove all resources."""
         self.unit.status = MaintenanceStatus("Removing K8S resources")
-        k8s_resources_manifests = self.k8s_resource_handler.render_manifests()
-        try:
-            delete_many(self.k8s_resource_handler.lightkube_client, k8s_resources_manifests)
-        except ApiError as error:
-            # do not log/report when resources were not found
-            if error.status.code != 404:
-                self.logger.error(f"Failed to delete K8S resources, with error: {error}")
-                raise error
+        # Define the KubernetesResourceHandler manually because the object storage conflict in
+        # `self._context` is not available anymore, and all we need is the labels/resource_types
+        # to delete the resources anyway
+        k8s_resource_handler = KubernetesResourceHandler(
+            field_manager=self._lightkube_field_manager,
+            template_files=[],
+            context={},
+            logger=self.logger,
+            labels=self._charm_default_kubernetes_labels,
+            resource_types={Service, ServiceAccount, ClusterRole, ClusterRoleBinding},
+        )
+        load_in_cluster_generic_resources(k8s_resource_handler.lightkube_client)
+        k8s_resource_handler.delete()
+
         self.unit.status = MaintenanceStatus("K8S resources removed")
 
     def _on_update_status(self, _):