diff --git a/swiftclient/service.py b/swiftclient/service.py
index 2760a08d..ba21a49e 100644
--- a/swiftclient/service.py
+++ b/swiftclient/service.py
@@ -1815,19 +1815,19 @@ class SwiftService(object):
 
             if old_manifest or old_slo_manifest_paths:
                 drs = []
+                delobjsmap = {}
                 if old_manifest:
                     scontainer, sprefix = old_manifest.split('/', 1)
                     scontainer = unquote(scontainer)
                     sprefix = unquote(sprefix).rstrip('/') + '/'
-                    delobjs = []
-                    for delobj in conn.get_container(scontainer,
-                                                     prefix=sprefix)[1]:
-                        delobjs.append(delobj['name'])
-                    for dr in self.delete(container=scontainer,
-                                          objects=delobjs):
-                        drs.append(dr)
+                    delobjsmap[scontainer] = []
+                    for part in self.list(scontainer, {'prefix': sprefix}):
+                        if not part["success"]:
+                            raise part["error"]
+                        delobjsmap[scontainer].extend(
+                            seg['name'] for seg in part['listing'])
+
                 if old_slo_manifest_paths:
-                    delobjsmap = {}
                     for seg_to_delete in old_slo_manifest_paths:
                         if seg_to_delete in new_slo_manifest_paths:
                             continue
@@ -1836,10 +1836,18 @@ class SwiftService(object):
                         delobjs_cont = delobjsmap.get(scont, [])
                         delobjs_cont.append(sobj)
                         delobjsmap[scont] = delobjs_cont
-                    for (dscont, dsobjs) in delobjsmap.items():
-                        for dr in self.delete(container=dscont,
-                                              objects=dsobjs):
-                            drs.append(dr)
+
+                del_segs = []
+                for dscont, dsobjs in delobjsmap.items():
+                    for dsobj in dsobjs:
+                        del_seg = self.thread_manager.segment_pool.submit(
+                            self._delete_segment, dscont, dsobj,
+                            results_queue=results_queue
+                        )
+                        del_segs.append(del_seg)
+
+                for del_seg in interruptable_as_completed(del_segs):
+                    drs.append(del_seg.result())
                 res['segment_delete_results'] = drs
 
             # return dict for printing
diff --git a/tests/unit/test_shell.py b/tests/unit/test_shell.py
index 98cef855..e4d2b009 100644
--- a/tests/unit/test_shell.py
+++ b/tests/unit/test_shell.py
@@ -491,11 +491,11 @@ class TestShell(unittest.TestCase):
         expected_delete_calls = [
             mock.call(
                 b'container1', b'old_seg1',
-                query_string=None, response_dict={}
+                response_dict={}
             ),
             mock.call(
                 b'container2', b'old_seg2',
-                query_string=None, response_dict={}
+                response_dict={}
             )
         ]
         self.assertEqual(
@@ -540,9 +540,11 @@ class TestShell(unittest.TestCase):
         ]
         connection.return_value.get_container.side_effect = [
             [None, [{'name': 'prefix_a', 'bytes': 0,
-                     'last_modified': '123T456'},
-                    {'name': 'prefix_b', 'bytes': 0,
-                     'last_modified': '123T456'}]]
+                     'last_modified': '123T456'}]],
+            # Have multiple pages worth of DLO segments
+            [None, [{'name': 'prefix_b', 'bytes': 0,
+                     'last_modified': '123T456'}]],
+            [None, []]
         ]
         connection.return_value.put_object.return_value = (
             'd41d8cd98f00b204e9800998ecf8427e')
@@ -557,11 +559,11 @@ class TestShell(unittest.TestCase):
         expected_delete_calls = [
             mock.call(
                 'container1', 'prefix_a',
-                query_string=None, response_dict={}
+                response_dict={}
             ),
             mock.call(
                 'container1', 'prefix_b',
-                query_string=None, response_dict={}
+                response_dict={}
             )
         ]
         self.assertEqual(