diff --git a/fio/connection.py b/fio/connection.py
index 6d82179..40018c4 100644
--- a/fio/connection.py
+++ b/fio/connection.py
@@ -78,13 +78,25 @@
 
 
 def detach_volume(
+    att: openstack.compute.v2.volume_attachment.VolumeAttachment,
     srv: openstack.compute.v2.server.Server,
     vol: openstack.block_storage.v3.volume.Volume
 ) -> None:
-    cloud.compute.delete_volume_attachment(srv, vol)
+    cloud.compute.delete_volume_attachment(att, srv)
     cloud.volume.wait_for_status(vol, status='available')
 
 
+def find_server_group(
+        name: str
+) -> Union[openstack.compute.v2.server_group.ServerGroup, None]:
+    server_groups = cloud.compute.server_groups(all_projects=True)
+    matching_server_groups = [s for s in server_groups
+                              if s.name == name]
+    server_group = matching_server_groups[0] \
+        if matching_server_groups else None
+    return server_group
+
+
 if __name__ == "__main__":
     print(UBUNTU_IMAGE_NAME)
     print(FIO_SG_NAME)
diff --git a/fio/fio_cleanup.py b/fio/fio_cleanup.py
index 753df87..f403823 100644
--- a/fio/fio_cleanup.py
+++ b/fio/fio_cleanup.py
@@ -14,6 +14,7 @@
 FLAVOR_NAME: Final[str] = conn.FIO_FLAVOR_NAME
 KEYPAIR_NAME: Final[str] = conn.FIO_KEYPAIR_NAME
 SG_NAME: Final[str] = conn.FIO_SG_NAME
+VOL_NAME_MASK: Final[str] = conn.FIO_VOL_NAME_MASK
 
 ROUTER_NAME: Final[str] = conn.FIO_ROUTER_NAME
 NET_NAME: Final[str] = conn.FIO_NET_NAME
@@ -30,19 +31,19 @@
         vol_id = att.volume_id
         vol = volume.get_volume(vol_id)
         try:
-            conn.detach_volume(vm, vol)
+            conn.detach_volume(att, vm, vol)
             print(
                 f"'{vol.id}' volume has been detached from fio '{vm.name}'"
                 " server.")
             conn.delete_volume(vol)
             print(f"'{vol.id}' volume has been deleted.")
-            conn.delete_server(vm)
-            print(f"'{vm.name}' server has been deleted.")
         except ResourceFailure as e:
             print(
                 f"Cleanup of '{vm.id}' with volume '{vol.id}' attached "
                 f"failed with '{e.message}' error.")
             conn.delete_volume(vol)
+    conn.delete_server(vm)
+    print(f"'{vm.name}' server has been deleted.")
 
 
 if __name__ == "__main__":
@@ -59,11 +60,12 @@
     router = network.find_router(ROUTER_NAME)
     if router:
         network.update_router(router.id, external_gateway_info={})
-        print("Externa GW port has been deleted from fio router.")
+        print("External GW port has been deleted from fio router.")
         router_ports = network.ports(device_id=router.id)
         for p in router_ports:
-            network.remove_interface_from_router(router.id, port_id=p.id)
-            print(f"'{p.id}' port has been deleted from fio router.")
+            if p.device_owner != "network:router_ha_interface":
+                network.remove_interface_from_router(router.id, port_id=p.id)
+                print(f"'{p.id}' port has been deleted from fio router.")
 
     # Delete fio network topology
     net = network.find_network(NET_NAME)
@@ -92,9 +94,15 @@
         network.delete_security_group(sg)
         print(f"fio '{sg.id}' security group has been deleted.")
 
+    # Delete the orphan fio volumes which are not attached (if any)
+    volumes = volume.volumes(VOL_NAME_MASK)
+    for v in volumes:
+        if not v.attachments:
+            volume.delete_volume(v.id)
+            print(f"'{v.id}' volume has been deleted.")
+
     # Delete fio server group
-    server_group = compute.find_server_group(
-        AA_SERVER_GROUP_NAME, all_projects=True)
+    server_group = conn.find_server_group(AA_SERVER_GROUP_NAME)
     if server_group:
         compute.delete_server_group(server_group)
         print(f"fio '{server_group.name}' server group has been deleted.")
diff --git a/fio/fio_setup.py b/fio/fio_setup.py
index 3220aab..be33d28 100644
--- a/fio/fio_setup.py
+++ b/fio/fio_setup.py
@@ -114,7 +114,7 @@
         conn.delete_volume(vol)
 
     # Attach the volume to the fio client
-    compute.create_volume_attachment(vm, volume=vol)
+    compute.create_volume_attachment(vm,  volume_id=vol.id)
     try:
         vol = volume.wait_for_status(vol, status='in-use')
         print(f"Volume '{vol.name}' is attached to '{vm.name}' fio client")
@@ -195,8 +195,7 @@
             router.id, subnet_id=fio_subnet.id)
 
     # Create fio server group with anti-affinity scheduling policy
-    server_group = compute.find_server_group(
-        AA_SERVER_GROUP_NAME, all_projects=True)
+    server_group = conn.find_server_group(AA_SERVER_GROUP_NAME)
     if not server_group:
         server_group = compute.create_server_group(
             name=AA_SERVER_GROUP_NAME, policies=['soft-anti-affinity'])
