diff --git a/osm_lcm/k8s.py b/osm_lcm/k8s.py
index 58337ac..104515b 100644
--- a/osm_lcm/k8s.py
+++ b/osm_lcm/k8s.py
@@ -267,6 +267,17 @@
         else:
             return await self.check_dummy_operation(op_id, op_params, content)
 
+    def check_force_delete_and_delete_from_db(
+        self, _id, workflow_status, resource_status, force
+    ):
+        self.logger.info(
+            f" Force: {force} Workflow status: {workflow_status} Resource Status: {resource_status}"
+        )
+        if force and (not workflow_status or not resource_status):
+            self.db.del_one(self.db_collection, {"_id": _id})
+            return True
+        return False
+
     def decrypted_copy(self, content, fields=["age_pubkey", "age_privkey"]):
         # This deep copy is intended to be passed to ODU workflows.
         content_copy = copy.deepcopy(content)
@@ -658,6 +669,14 @@
         db_cluster["current_operation"] = None
         self.db.set_one("clusters", {"_id": db_cluster["_id"]}, db_cluster)
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                cluster_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         # To delete it from DB
         if db_cluster["state"] == "DELETED":
             self.delete_cluster(db_cluster)
@@ -1533,6 +1552,15 @@
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
+        self.logger.info(f"Resource status: {resource_status}")
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1613,6 +1641,14 @@
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1695,6 +1731,14 @@
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1777,6 +1821,14 @@
                 "delete_profile", op_id, op_params, content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                profile_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             content["state"] = "DELETED"
             profile_type = self.profile_type_mapping[content["profile_type"]]
@@ -1883,6 +1935,14 @@
                 "delete_oka", op_id, op_params, db_content
             )
 
+        force = params.get("force", False)
+        if force:
+            force_delete_status = self.check_force_delete_and_delete_from_db(
+                oka_id, workflow_status, resource_status, force
+            )
+            if force_delete_status:
+                return
+
         if resource_status:
             db_content["state"] == "DELETED"
             self.db.set_one(self.db_collection, {"_id": db_content["_id"]}, db_content)
@@ -2098,6 +2158,14 @@
                     "delete_ksus", op_id, ksu_params, db_ksu
                 )
 
+            force = params.get("force", False)
+            if force:
+                force_delete_status = self.check_force_delete_and_delete_from_db(
+                    db_ksu["_id"], workflow_status, resource_status, force
+                )
+                if force_delete_status:
+                    return
+
             if resource_status:
                 db_ksu["state"] == "DELETED"
                 self.db.set_one(self.db_collection, {"_id": db_ksu["_id"]}, db_ksu)
