diff --git a/patches/openstack/cinder/sep-sp-clone-volume.patch b/patches/openstack/cinder/sep-sp-clone-volume.patch
index abe5bc5..cbf209e 100644
--- a/patches/openstack/cinder/sep-sp-clone-volume.patch
+++ b/patches/openstack/cinder/sep-sp-clone-volume.patch
@@ -29,8 +29,6 @@
  4 files changed, 208 insertions(+), 34 deletions(-)
  create mode 100644 releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml
 
-diff --git a/cinder/tests/unit/volume/drivers/test_storpool.py b/cinder/tests/unit/volume/drivers/test_storpool.py
-index 2e6f56526..65d4ed304 100644
 --- a/cinder/tests/unit/volume/drivers/test_storpool.py
 +++ b/cinder/tests/unit/volume/drivers/test_storpool.py
 @@ -14,6 +14,7 @@
@@ -41,7 +39,7 @@
  import re
  import sys
  from unittest import mock
-@@ -110,13 +111,33 @@ class MockAPI(object):
+@@ -110,13 +111,33 @@
      def snapshotCreate(self, vname, snap):
          snapshots[snap['name']] = dict(volumes[vname])
  
@@ -77,7 +75,7 @@
  
      def volumeDelete(self, name):
          del volumes[name]
-@@ -171,6 +192,23 @@ fakeStorPool.spopenstack.AttachDB = MockAttachDB
+@@ -174,6 +195,23 @@
  fakeStorPool.sptypes.VolumeUpdateDesc = MockVolumeUpdateDesc
  
  
@@ -101,9 +99,9 @@
  @ddt.ddt
  class StorPoolTestCase(test.TestCase):
  
-@@ -260,6 +298,11 @@ class StorPoolTestCase(test.TestCase):
+@@ -265,6 +303,11 @@
          self.assertListEqual(sorted([volumeName(n) for n in names]),
-                              sorted(volumes.keys()))
+                              sorted(data['name'] for data in volumes.values()))
  
 +    def assertSnapshotNames(self, specs):
 +        self.assertListEqual(
@@ -113,7 +111,7 @@
      @mock_volume_types
      def test_create_delete_volume(self):
          self.assertVolumeNames([])
-@@ -272,7 +315,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -277,7 +320,7 @@
          self.assertVolumeNames(('1',))
          v = volumes[volumeName('1')]
          self.assertEqual(1 * units.Gi, v['size'])
@@ -122,7 +120,7 @@
          self.assertEqual(3, v['replication'])
  
          caught = False
-@@ -292,7 +335,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -297,7 +340,7 @@
          self.assertVolumeNames(('1',))
          v = volumes[volumeName('1')]
          self.assertEqual(2 * units.Gi, v['size'])
@@ -131,7 +129,7 @@
          self.assertEqual(3, v['replication'])
  
          self.driver.create_volume({'id': '2', 'name': 'v2', 'size': 3,
-@@ -300,7 +343,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -305,7 +348,7 @@
          self.assertVolumeNames(('1', '2'))
          v = volumes[volumeName('2')]
          self.assertEqual(3 * units.Gi, v['size'])
@@ -140,7 +138,7 @@
          self.assertEqual(3, v['replication'])
  
          self.driver.create_volume({'id': '3', 'name': 'v2', 'size': 4,
-@@ -322,7 +365,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -327,7 +370,7 @@
          # Make sure the dictionary is not corrupted somehow...
          v = volumes[volumeName('1')]
          self.assertEqual(2 * units.Gi, v['size'])
@@ -149,7 +147,7 @@
          self.assertEqual(3, v['replication'])
  
          for vid in ('1', '2', '3', '4'):
-@@ -386,16 +429,17 @@ class StorPoolTestCase(test.TestCase):
+@@ -395,16 +438,17 @@
          self.driver.extend_volume({'id': '1'}, 2)
          self.assertEqual(2 * units.Gi, volumes[volumeName('1')]['size'])
  
@@ -175,7 +173,7 @@
  
          self.driver.delete_volume({'id': 1})
          self.driver.delete_volume({'id': 2})
-@@ -403,6 +447,78 @@ class StorPoolTestCase(test.TestCase):
+@@ -412,6 +456,78 @@
          self.assertDictEqual({}, volumes)
          self.assertDictEqual({}, snapshots)
  
@@ -254,7 +252,7 @@
      @mock_volume_types
      def test_config_replication(self):
          self.assertVolumeNames([])
-@@ -422,7 +538,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -431,7 +547,7 @@
          self.assertVolumeNames(('cfgrepl1',))
          v = volumes[volumeName('cfgrepl1')]
          self.assertEqual(3, v['replication'])
@@ -263,7 +261,7 @@
          self.driver.delete_volume({'id': 'cfgrepl1'})
  
          self.driver.configuration.storpool_replication = 2
-@@ -436,7 +552,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -445,7 +561,7 @@
          self.assertVolumeNames(('cfgrepl2',))
          v = volumes[volumeName('cfgrepl2')]
          self.assertEqual(2, v['replication'])
@@ -272,7 +270,7 @@
          self.driver.delete_volume({'id': 'cfgrepl2'})
  
          self.driver.create_volume({'id': 'cfgrepl3', 'name': 'v1', 'size': 1,
-@@ -468,7 +584,7 @@ class StorPoolTestCase(test.TestCase):
+@@ -477,7 +593,7 @@
          self.assertVolumeNames(('cfgtempl1',))
          v = volumes[volumeName('cfgtempl1')]
          self.assertEqual(3, v['replication'])
@@ -281,11 +279,9 @@
          self.driver.delete_volume({'id': 'cfgtempl1'})
  
          self.driver.create_volume({'id': 'cfgtempl2', 'name': 'v1', 'size': 1,
-diff --git a/cinder/volume/drivers/storpool.py b/cinder/volume/drivers/storpool.py
-index cdaf0043d..418e5750f 100644
 --- a/cinder/volume/drivers/storpool.py
 +++ b/cinder/volume/drivers/storpool.py
-@@ -19,11 +19,13 @@ import platform
+@@ -19,11 +19,13 @@
  
  from oslo_config import cfg
  from oslo_log import log as logging
@@ -299,7 +295,7 @@
  from cinder import exception
  from cinder.i18n import _
  from cinder import interface
-@@ -197,30 +199,80 @@ class StorPoolDriver(driver.VolumeDriver):
+@@ -197,30 +199,80 @@
  
      def create_cloned_volume(self, volume, src_vref):
          refname = self._attach.volumeName(src_vref['id'])
@@ -358,11 +354,7 @@
 +                    snapname,
 +                    {'template': template},
 +                )
-             except spapi.ApiError as e:
--                # ARGH!
--                LOG.error("Could not delete the temp snapshot %(name)s: "
--                          "%(msg)s",
--                          {'name': snapname, 'msg': e})
++            except spapi.ApiError as e:
 +                raise self._backendException(e)
 +
 +            try:
@@ -379,7 +371,11 @@
 +                    snapname,
 +                    {'tags': {'transient': '1.0'}},
 +                )
-+            except spapi.ApiError as e:
+             except spapi.ApiError as e:
+-                # ARGH!
+-                LOG.error("Could not delete the temp snapshot %(name)s: "
+-                          "%(msg)s",
+-                          {'name': snapname, 'msg': e})
 +                raise self._backendException(e)
 +        except Exception:
 +            with excutils.save_and_reraise_exception():
@@ -396,11 +392,9 @@
  
      def create_export(self, context, volume, connector):
          pass
-diff --git a/driver-requirements.txt b/driver-requirements.txt
-index 0240e7e78..5b992df2e 100644
 --- a/driver-requirements.txt
 +++ b/driver-requirements.txt
-@@ -40,7 +40,7 @@ infi.dtypes.wwn # PSF
+@@ -41,7 +41,7 @@
  infi.dtypes.iqn # PSF
  
  # Storpool
@@ -409,9 +403,6 @@
  storpool.spopenstack>=2.2.1 # Apache-2.0
  
  # Datera
-diff --git a/releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml b/releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml
-new file mode 100644
-index 000000000..180427d9e
 --- /dev/null
 +++ b/releasenotes/notes/storpool-clone-better-dca90f40c9273de9.yaml
 @@ -0,0 +1,6 @@
@@ -421,6 +412,3 @@
 +    StorPool driver: improved the way volumes are clonsed into different
 +    StorPool templates (exposed as Cinder storage pools) if requested,
 +    eliminating some data duplication in the underlying StorPool cluster.
--- 
-2.35.1
-
diff --git a/patches/openstack/cinder/sep-sp-fix-test-rename.patch b/patches/openstack/cinder/sep-sp-fix-test-rename.patch
new file mode 100644
index 0000000..742699f
--- /dev/null
+++ b/patches/openstack/cinder/sep-sp-fix-test-rename.patch
@@ -0,0 +1,29 @@
+StorPool: fix the "rename volume" unit test emulation
+
+Also update the "name" field of the actual data structure in
+the fake list of volumes.
+
+Change-Id: Iee9e3feea1af4f3d0acdf05ea1b540ecf59e755b
+--- a/cinder/tests/unit/volume/drivers/test_storpool.py
++++ b/cinder/tests/unit/volume/drivers/test_storpool.py
+@@ -135,7 +135,10 @@
+             volumes[name]['size'] = data['size']
+ 
+         if 'rename' in data and data['rename'] != name:
+-            volumes[data['rename']] = volumes[name]
++            new_name = data['rename']
++            volumes[new_name] = volumes[name]
++            if volumes[new_name]['name'] == name:
++                volumes[new_name]['name'] = new_name
+             del volumes[name]
+ 
+ 
+@@ -259,6 +262,8 @@
+     def assertVolumeNames(self, names):
+         self.assertListEqual(sorted([volumeName(n) for n in names]),
+                              sorted(volumes.keys()))
++        self.assertListEqual(sorted([volumeName(n) for n in names]),
++                             sorted(data['name'] for data in volumes.values()))
+ 
+     @mock_volume_types
+     def test_create_delete_volume(self):
diff --git a/patches/openstack/cinder/sep-sp-retype-vol.patch b/patches/openstack/cinder/sep-sp-retype-vol.patch
index 9f40140..70be672 100644
--- a/patches/openstack/cinder/sep-sp-retype-vol.patch
+++ b/patches/openstack/cinder/sep-sp-retype-vol.patch
@@ -10,7 +10,7 @@
 
 --- a/cinder/volume/drivers/storpool.py
 +++ b/cinder/volume/drivers/storpool.py
-@@ -405,10 +405,12 @@
+@@ -353,10 +353,12 @@
                              update['template'] = templ
                          else:
                              update['replication'] = repl
@@ -27,7 +27,7 @@
  
          if update:
              name = self._attach.volumeName(volume['id'])
-@@ -433,21 +435,46 @@
+@@ -381,21 +383,46 @@
                        'created as part of the migration from '
                        '"%(oid)s".', {'tid': temp_id, 'oid': orig_id})
              return {'_name_id': new_volume['_name_id'] or new_volume['id']}
@@ -43,21 +43,21 @@
 -            return {'_name_id': new_volume['_name_id'] or new_volume['id']}
 -        else:
 +            int_name = temp_name + '--temp--mig'
-+            LOG.debug('Trying to swap the volume names, intermediate "%(int)s"',
++            LOG.debug('Trying to swap volume names, intermediate "%(int)s"',
 +                      {'int': int_name})
              try:
 +                LOG.debug('- rename "%(orig)s" to "%(int)s"',
-+                    {'orig': orig_name, 'int': int_name})
++                          {'orig': orig_name, 'int': int_name})
 +                self._attach.api().volumeUpdate(orig_name,
 +                                                {'rename': int_name})
 +
 +                LOG.debug('- rename "%(temp)s" to "%(orig)s"',
-+                    {'temp': temp_name, 'orig': orig_name})
++                          {'temp': temp_name, 'orig': orig_name})
                  self._attach.api().volumeUpdate(temp_name,
                                                  {'rename': orig_name})
 +
 +                LOG.debug('- rename "%(int)s" to "%(temp)s"',
-+                    {'int': int_name, 'temp': temp_name})
++                          {'int': int_name, 'temp': temp_name})
 +                self._attach.api().volumeUpdate(int_name,
 +                                                {'rename': temp_name})
                  return {'_name_id': None}
@@ -80,3 +80,34 @@
 +                      '%(err)s',
 +                      {'tname': temp_name, 'oname': orig_name, 'err': e})
 +            return {'_name_id': new_volume['_name_id'] or new_volume['id']}
+--- a/cinder/tests/unit/volume/drivers/test_storpool.py
++++ b/cinder/tests/unit/volume/drivers/test_storpool.py
+@@ -358,18 +358,22 @@
+                                                  'available')
+         self.assertDictEqual({'_name_id': '1'}, res)
+ 
+-        # Failure: a volume with the original volume's name already exists
+-        res = self.driver.update_migrated_volume(None, {'id': '1'},
+-                                                 {'id': '2', '_name_id': '1'},
+-                                                 'available')
+-        self.assertDictEqual({'_name_id': '1'}, res)
+-
+         # Success: rename the migrated volume to match the original
+         res = self.driver.update_migrated_volume(None, {'id': '3'},
+                                                  {'id': '2', '_name_id': '3'},
+                                                  'available')
+         self.assertDictEqual({'_name_id': None}, res)
+         six.assertCountEqual(self,
++                             [volumeName('1'), volumeName('3')],
++                             volumes.keys())
++        self.assertVolumeNames(('1', '3',))
++
++        # Success: swap volume names with an existing volume
++        res = self.driver.update_migrated_volume(None, {'id': '1'},
++                                                 {'id': '3', '_name_id': '1'},
++                                                 'available')
++        self.assertDictEqual({'_name_id': None}, res)
++        six.assertCountEqual(self,
+                              [volumeName('1'), volumeName('3')],
+                              volumes.keys())
+         self.assertVolumeNames(('1', '3',))
