diff --git a/RO-VIM-aws/osm_rovim_aws/vimconn_aws.py b/RO-VIM-aws/osm_rovim_aws/vimconn_aws.py
index 5a937d6..df8914b 100644
--- a/RO-VIM-aws/osm_rovim_aws/vimconn_aws.py
+++ b/RO-VIM-aws/osm_rovim_aws/vimconn_aws.py
@@ -948,7 +948,7 @@
         except Exception as e:
             self.format_vimconn_exception(e)
 
-    def delete_vminstance(self, vm_id, created_items=None, volumes_2hold=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         """Removes a VM instance from VIM
         Returns the instance identifier"""
         try:
diff --git a/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py b/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py
index c3185b8..1034f84 100755
--- a/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py
+++ b/RO-VIM-azure/osm_rovim_azure/vimconn_azure.py
@@ -1481,7 +1481,7 @@
         nic_delete.wait()
         self.logger.debug("deleted NIC name: %s", nic_name)
 
-    def delete_vminstance(self, vm_id, created_items=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         """Deletes a vm instance from the vim."""
         self.logger.debug(
             "deleting VM instance {} - {}".format(self.resource_group, vm_id)
diff --git a/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py b/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py
index 67d8c41..e8ecbb3 100644
--- a/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py
+++ b/RO-VIM-gcp/osm_rovim_gcp/vimconn_gcp.py
@@ -1118,7 +1118,7 @@
         self.logger.debug("get_vminstance Return: response %s", response)
         return response
 
-    def delete_vminstance(self, vm_id, created_items=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         """Deletes a vm instance from the vim."""
         self.logger.debug(
             "delete_vminstance begin: vm_id %s created_items %s",
diff --git a/RO-VIM-openvim/osm_rovim_openvim/vimconn_openvim.py b/RO-VIM-openvim/osm_rovim_openvim/vimconn_openvim.py
index 553ec89..4f93336 100644
--- a/RO-VIM-openvim/osm_rovim_openvim/vimconn_openvim.py
+++ b/RO-VIM-openvim/osm_rovim_openvim/vimconn_openvim.py
@@ -1099,7 +1099,7 @@
         except (requests.exceptions.RequestException, js_e.ValidationError) as e:
             self._format_request_exception(e)
 
-    def delete_vminstance(self, vm_id, created_items=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         """Removes a VM instance from VIM, returns the deleted vm_id"""
         try:
             self._get_my_tenant()
diff --git a/RO-VIM-vmware/osm_rovim_vmware/vimconn_vmware.py b/RO-VIM-vmware/osm_rovim_vmware/vimconn_vmware.py
index ff89b5a..e06b2f9 100644
--- a/RO-VIM-vmware/osm_rovim_vmware/vimconn_vmware.py
+++ b/RO-VIM-vmware/osm_rovim_vmware/vimconn_vmware.py
@@ -3488,18 +3488,16 @@
 
         return vm_dict
 
-    def delete_vminstance(self, vm__vim_uuid, created_items=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         """Method poweroff and remove VM instance from vcloud director network.
 
         Args:
-            vm__vim_uuid: VM UUID
+            vm_id: VM UUID
 
         Returns:
             Returns the instance identifier
         """
-        self.logger.debug(
-            "Client requesting delete vm instance {} ".format(vm__vim_uuid)
-        )
+        self.logger.debug("Client requesting delete vm instance {} ".format(vm_id))
 
         _, vdc = self.get_vdc_details()
         vdc_obj = VDC(self.client, href=vdc.get("href"))
@@ -3516,24 +3514,22 @@
             )
 
         try:
-            vapp_name = self.get_namebyvappid(vm__vim_uuid)
+            vapp_name = self.get_namebyvappid(vm_id)
             if vapp_name is None:
                 self.logger.debug(
                     "delete_vminstance(): Failed to get vm by given {} vm uuid".format(
-                        vm__vim_uuid
+                        vm_id
                     )
                 )
 
                 return (
                     -1,
                     "delete_vminstance(): Failed to get vm by given {} vm uuid".format(
-                        vm__vim_uuid
+                        vm_id
                     ),
                 )
 
-            self.logger.info(
-                "Deleting vApp {} and UUID {}".format(vapp_name, vm__vim_uuid)
-            )
+            self.logger.info("Deleting vApp {} and UUID {}".format(vapp_name, vm_id))
             vapp_resource = vdc_obj.get_vapp(vapp_name)
             vapp = VApp(self.client, resource=vapp_resource)
 
@@ -3565,13 +3561,13 @@
                     if not powered_off:
                         self.logger.debug(
                             "delete_vminstance(): Failed to power off VM instance {} ".format(
-                                vm__vim_uuid
+                                vm_id
                             )
                         )
                     else:
                         self.logger.info(
                             "delete_vminstance(): Powered off VM instance {} ".format(
-                                vm__vim_uuid
+                                vm_id
                             )
                         )
 
@@ -3584,14 +3580,14 @@
                         if not vapp:
                             self.logger.debug(
                                 "delete_vminstance(): Failed to get vm by given {} vm uuid".format(
-                                    vm__vim_uuid
+                                    vm_id
                                 )
                             )
 
                             return (
                                 -1,
                                 "delete_vminstance(): Failed to get vm by given {} vm uuid".format(
-                                    vm__vim_uuid
+                                    vm_id
                                 ),
                             )
 
@@ -3614,7 +3610,7 @@
                     if not undeployed:
                         self.logger.debug(
                             "delete_vminstance(): Failed to undeploy vApp {} ".format(
-                                vm__vim_uuid
+                                vm_id
                             )
                         )
 
@@ -3629,14 +3625,14 @@
                         if not vapp:
                             self.logger.debug(
                                 "delete_vminstance(): Failed to get vm by given {} vm uuid".format(
-                                    vm__vim_uuid
+                                    vm_id
                                 )
                             )
 
                             return (
                                 -1,
                                 "delete_vminstance(): Failed to get vm by given {} vm uuid".format(
-                                    vm__vim_uuid
+                                    vm_id
                                 ),
                             )
 
@@ -3656,16 +3652,14 @@
 
                     if result is None:
                         self.logger.debug(
-                            "delete_vminstance(): Failed delete uuid {} ".format(
-                                vm__vim_uuid
-                            )
+                            "delete_vminstance(): Failed delete uuid {} ".format(vm_id)
                         )
                     else:
                         self.logger.info(
-                            "Deleted vm instance {} sccessfully".format(vm__vim_uuid)
+                            "Deleted vm instance {} successfully".format(vm_id)
                         )
                         config_drive_catalog_name, config_drive_catalog_id = (
-                            "cfg_drv-" + vm__vim_uuid,
+                            "cfg_drv-" + vm_id,
                             None,
                         )
                         catalog_list = self.get_image_list()
@@ -3688,12 +3682,12 @@
                             )
                             self.delete_image(config_drive_catalog_id)
 
-                        return vm__vim_uuid
+                        return vm_id
         except Exception:
             self.logger.debug(traceback.format_exc())
 
             raise vimconn.VimConnException(
-                "delete_vminstance(): Failed delete vm instance {}".format(vm__vim_uuid)
+                "delete_vminstance(): Failed delete vm instance {}".format(vm_id)
             )
 
     def refresh_vms_status(self, vm_list):
@@ -4001,17 +3995,15 @@
                 exc_info=True,
             )
 
-    def action_vminstance(self, vm__vim_uuid=None, action_dict=None, created_items={}):
+    def action_vminstance(self, vm_id=None, action_dict=None, created_items={}):
         """Send and action over a VM instance from VIM
         Returns the vm_id if the action was successfully sent to the VIM"""
 
         self.logger.debug(
-            "Received action for vm {} and action dict {}".format(
-                vm__vim_uuid, action_dict
-            )
+            "Received action for vm {} and action dict {}".format(vm_id, action_dict)
         )
 
-        if vm__vim_uuid is None or action_dict is None:
+        if vm_id is None or action_dict is None:
             raise vimconn.VimConnException("Invalid request. VM id or action is None.")
 
         _, vdc = self.get_vdc_details()
@@ -4022,20 +4014,20 @@
                 )
             )
 
-        vapp_name = self.get_namebyvappid(vm__vim_uuid)
+        vapp_name = self.get_namebyvappid(vm_id)
         if vapp_name is None:
             self.logger.debug(
                 "action_vminstance(): Failed to get vm by given {} vm uuid".format(
-                    vm__vim_uuid
+                    vm_id
                 )
             )
 
             raise vimconn.VimConnException(
-                "Failed to get vm by given {} vm uuid".format(vm__vim_uuid)
+                "Failed to get vm by given {} vm uuid".format(vm_id)
             )
         else:
             self.logger.info(
-                "Action_vminstance vApp {} and UUID {}".format(vapp_name, vm__vim_uuid)
+                "Action_vminstance vApp {} and UUID {}".format(vapp_name, vm_id)
             )
 
         try:
@@ -4047,7 +4039,7 @@
                 self.logger.info(
                     "action_vminstance: Power on vApp: {}".format(vapp_name)
                 )
-                poweron_task = self.power_on_vapp(vm__vim_uuid, vapp_name)
+                poweron_task = self.power_on_vapp(vm_id, vapp_name)
                 result = self.client.get_task_monitor().wait_for_success(
                     task=poweron_task
                 )
@@ -4070,7 +4062,7 @@
                 self.instance_actions_result("pause", result, vapp_name)
             elif "resume" in action_dict:
                 self.logger.info("action_vminstance: resume vApp: {}".format(vapp_name))
-                poweron_task = self.power_on_vapp(vm__vim_uuid, vapp_name)
+                poweron_task = self.power_on_vapp(vm_id, vapp_name)
                 result = self.client.get_task_monitor().wait_for_success(
                     task=poweron_task
                 )
@@ -4102,7 +4094,7 @@
                     )
                 )
 
-            return vm__vim_uuid
+            return vm_id
         except Exception as exp:
             self.logger.debug("action_vminstance: Failed with Exception {}".format(exp))
 
diff --git a/RO-plugin/osm_ro_plugin/vim_dummy.py b/RO-plugin/osm_ro_plugin/vim_dummy.py
index 6c59607..fbc6bfe 100644
--- a/RO-plugin/osm_ro_plugin/vim_dummy.py
+++ b/RO-plugin/osm_ro_plugin/vim_dummy.py
@@ -424,7 +424,7 @@
 
         return self.vms[vm_id]
 
-    def delete_vminstance(self, vm_id, created_items=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         if vm_id not in self.vms:
             raise vimconn.VimConnNotFoundException(
                 "vm with id {} not found".format(vm_id)
diff --git a/RO-plugin/osm_ro_plugin/vimconn.py b/RO-plugin/osm_ro_plugin/vimconn.py
index 20ab3a3..bb06037 100644
--- a/RO-plugin/osm_ro_plugin/vimconn.py
+++ b/RO-plugin/osm_ro_plugin/vimconn.py
@@ -661,7 +661,7 @@
         """Returns the VM instance information from VIM"""
         raise VimConnNotImplemented("Should have implemented this")
 
-    def delete_vminstance(self, vm_id, created_items=None):
+    def delete_vminstance(self, vm_id, created_items=None, volumes_to_hold=None):
         """
         Removes a VM instance from VIM and its associated elements
         :param vm_id: VIM identifier of the VM, provided by method new_vminstance
diff --git a/releasenotes/notes/Fixing_bug_2092-6a1246a7f9c0b959.yaml b/releasenotes/notes/Fixing_bug_2092-6a1246a7f9c0b959.yaml
new file mode 100644
index 0000000..7cbb522
--- /dev/null
+++ b/releasenotes/notes/Fixing_bug_2092-6a1246a7f9c0b959.yaml
@@ -0,0 +1,21 @@
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+---
+fixes:
+  - |
+    Fix bug 2092 to update params of delete_vminstance in all VIM connectors.
+    volumes_to_hold parameter is added to delete_vminstance method inputs.
