diff --git a/designateclient/client.py b/designateclient/client.py
index b4df6e6..2c0e7b3 100644
--- a/designateclient/client.py
+++ b/designateclient/client.py
@@ -77,8 +77,11 @@ class Controller(object):
             return body[response_key]
         return body
 
-    def _delete(self, url):
-        resp, body = self.client.session.delete(url)
+    def _delete(self, url, response_key=None, **kwargs):
+        resp, body = self.client.session.delete(url, **kwargs)
+        if response_key is not None:
+            return body[response_key]
+        return body
 
 
 @six.add_metaclass(abc.ABCMeta)
diff --git a/designateclient/functionaltests/client.py b/designateclient/functionaltests/client.py
index 0bac078..69ca2ca 100644
--- a/designateclient/functionaltests/client.py
+++ b/designateclient/functionaltests/client.py
@@ -79,7 +79,8 @@ class ZoneCommands(object):
                                **kwargs)
 
     def zone_delete(self, id, *args, **kwargs):
-        return self.parsed_cmd('zone delete %s' % id, *args, **kwargs)
+        return self.parsed_cmd('zone delete %s' % id, FieldValueModel, *args,
+                               **kwargs)
 
     def zone_create(self, name, email=None, ttl=None, description=None,
                     type=None, masters=None, *args, **kwargs):
@@ -214,7 +215,7 @@ class RecordsetCommands(object):
 
     def recordset_delete(self, zone_id, id, *args, **kwargs):
         cmd = 'recordset delete {0} {1}'.format(zone_id, id)
-        return self.parsed_cmd(cmd, *args, **kwargs)
+        return self.parsed_cmd(cmd, FieldValueModel, *args, **kwargs)
 
 
 class TLDCommands(object):
diff --git a/designateclient/functionaltests/v2/test_recordsets.py b/designateclient/functionaltests/v2/test_recordsets.py
index e104ba4..d8bc2af 100644
--- a/designateclient/functionaltests/v2/test_recordsets.py
+++ b/designateclient/functionaltests/v2/test_recordsets.py
@@ -69,13 +69,9 @@ class TestRecordset(BaseDesignateTest):
         self.assertEqual(self.recordset.zone_id, self.zone.id)
 
     def test_recordset_delete(self):
-        self.clients.recordset_delete(self.zone.id, self.recordset.id)
-        self.assertRaises(
-            CommandFailed,
-            self.clients.recordset_delete,
-            self.zone.id,
-            self.recordset.id,
-        )
+        rset = self.clients.recordset_delete(self.zone.id, self.recordset.id)
+        self.assertEqual(rset.action, 'DELETE')
+        self.assertEqual(rset.status, 'PENDING')
 
     def test_recordset_set(self):
         rset = self.clients.recordset_set(
diff --git a/designateclient/functionaltests/v2/test_zone.py b/designateclient/functionaltests/v2/test_zone.py
index 85927e8..2873948 100644
--- a/designateclient/functionaltests/v2/test_zone.py
+++ b/designateclient/functionaltests/v2/test_zone.py
@@ -55,8 +55,9 @@ class TestZone(BaseDesignateTest):
         self.assertEqual(self.zone.version, zone.version)
 
     def test_zone_delete(self):
-        self.clients.zone_delete(self.zone.id)
-        self.assertRaises(CommandFailed, self.clients.zone_show, self.zone.id)
+        zone = self.clients.zone_delete(self.zone.id)
+        self.assertEqual(zone.action, 'DELETE')
+        self.assertEqual(zone.status, 'PENDING')
 
     def test_zone_set(self):
         ttl = int(self.zone.ttl) + 123
diff --git a/designateclient/v2/cli/recordsets.py b/designateclient/v2/cli/recordsets.py
index fc0f29a..00d9348 100644
--- a/designateclient/v2/cli/recordsets.py
+++ b/designateclient/v2/cli/recordsets.py
@@ -16,7 +16,6 @@
 
 import logging
 
-from cliff import command
 from cliff import lister
 from cliff import show
 import six
@@ -193,7 +192,7 @@ class SetRecordSetCommand(show.ShowOne):
         return six.moves.zip(*sorted(six.iteritems(updated)))
 
 
-class DeleteRecordSetCommand(command.Command):
+class DeleteRecordSetCommand(show.ShowOne):
     """Delete recordset"""
 
     def get_parser(self, prog_name):
@@ -206,6 +205,9 @@ class DeleteRecordSetCommand(command.Command):
 
     def take_action(self, parsed_args):
         client = self.app.client_manager.dns
-        client.recordsets.delete(parsed_args.zone_id, parsed_args.id)
+        data = client.recordsets.delete(parsed_args.zone_id, parsed_args.id)
 
         LOG.info('RecordSet %s was deleted', parsed_args.id)
+
+        _format_recordset(data)
+        return six.moves.zip(*sorted(six.iteritems(data)))
diff --git a/designateclient/v2/cli/zones.py b/designateclient/v2/cli/zones.py
index 938a49a..7f49671 100644
--- a/designateclient/v2/cli/zones.py
+++ b/designateclient/v2/cli/zones.py
@@ -193,7 +193,7 @@ class SetZoneCommand(show.ShowOne):
         return six.moves.zip(*sorted(six.iteritems(updated)))
 
 
-class DeleteZoneCommand(command.Command):
+class DeleteZoneCommand(show.ShowOne):
     """Delete zone"""
 
     def get_parser(self, prog_name):
@@ -205,9 +205,12 @@ class DeleteZoneCommand(command.Command):
 
     def take_action(self, parsed_args):
         client = self.app.client_manager.dns
-        client.zones.delete(parsed_args.id)
+        data = client.zones.delete(parsed_args.id)
         LOG.info('Zone %s was deleted', parsed_args.id)
 
+        _format_zone(data)
+        return six.moves.zip(*sorted(six.iteritems(data)))
+
 
 class AbandonZoneCommand(command.Command):
     """Abandon a zone"""