diff --git a/tempest/api/messaging/base.py b/tempest/api/messaging/base.py
index c8dc5e0..eae0707 100644
--- a/tempest/api/messaging/base.py
+++ b/tempest/api/messaging/base.py
@@ -58,114 +58,114 @@
     @classmethod
     def create_queue(cls, queue_name):
         """Wrapper utility that returns a test queue."""
-        body = cls.client.create_queue(queue_name)
-        return body
+        resp, body = cls.client.create_queue(queue_name)
+        return resp, body
 
     @classmethod
     def delete_queue(cls, queue_name):
         """Wrapper utility that deletes a test queue."""
-        body = cls.client.delete_queue(queue_name)
-        return body
+        resp, body = cls.client.delete_queue(queue_name)
+        return resp, body
 
     @classmethod
     def check_queue_exists(cls, queue_name):
         """Wrapper utility that checks the existence of a test queue."""
-        body = cls.client.get_queue(queue_name)
-        return body
+        resp, body = cls.client.get_queue(queue_name)
+        return resp, body
 
     @classmethod
     def check_queue_exists_head(cls, queue_name):
         """Wrapper utility checks the head of a queue via http HEAD."""
-        body = cls.client.head_queue(queue_name)
-        return body
+        resp, body = cls.client.head_queue(queue_name)
+        return resp, body
 
     @classmethod
     def list_queues(cls):
         """Wrapper utility that lists queues."""
-        body = cls.client.list_queues()
-        return body
+        resp, body = cls.client.list_queues()
+        return resp, body
 
     @classmethod
     def get_queue_stats(cls, queue_name):
         """Wrapper utility that returns the queue stats."""
-        body = cls.client.get_queue_stats(queue_name)
-        return body
+        resp, body = cls.client.get_queue_stats(queue_name)
+        return resp, body
 
     @classmethod
     def get_queue_metadata(cls, queue_name):
         """Wrapper utility that gets a queue metadata."""
-        body = cls.client.get_queue_metadata(queue_name)
-        return body
+        resp, body = cls.client.get_queue_metadata(queue_name)
+        return resp, body
 
     @classmethod
     def set_queue_metadata(cls, queue_name, rbody):
         """Wrapper utility that sets the metadata of a queue."""
-        body = cls.client.set_queue_metadata(queue_name, rbody)
-        return body
+        resp, body = cls.client.set_queue_metadata(queue_name, rbody)
+        return resp, body
 
     @classmethod
     def post_messages(cls, queue_name, rbody):
         """Wrapper utility that posts messages to a queue."""
-        body = cls.client.post_messages(queue_name, rbody)
+        resp, body = cls.client.post_messages(queue_name, rbody)
 
-        return body
+        return resp, body
 
     @classmethod
     def list_messages(cls, queue_name):
         """Wrapper utility that lists the messages in a queue."""
-        body = cls.client.list_messages(queue_name)
+        resp, body = cls.client.list_messages(queue_name)
 
-        return body
+        return resp, body
 
     @classmethod
     def get_single_message(cls, message_uri):
         """Wrapper utility that gets a single message."""
-        body = cls.client.get_single_message(message_uri)
+        resp, body = cls.client.get_single_message(message_uri)
 
-        return body
+        return resp, body
 
     @classmethod
     def get_multiple_messages(cls, message_uri):
         """Wrapper utility that gets multiple messages."""
-        body = cls.client.get_multiple_messages(message_uri)
+        resp, body = cls.client.get_multiple_messages(message_uri)
 
-        return body
+        return resp, body
 
     @classmethod
     def delete_messages(cls, message_uri):
         """Wrapper utility that deletes messages."""
-        body = cls.client.delete_messages(message_uri)
+        resp, body = cls.client.delete_messages(message_uri)
 
-        return body
+        return resp, body
 
     @classmethod
     def post_claims(cls, queue_name, rbody, url_params=False):
         """Wrapper utility that claims messages."""
-        body = cls.client.post_claims(
+        resp, body = cls.client.post_claims(
             queue_name, rbody, url_params=False)
 
-        return body
+        return resp, body
 
     @classmethod
     def query_claim(cls, claim_uri):
         """Wrapper utility that gets a claim."""
-        body = cls.client.query_claim(claim_uri)
+        resp, body = cls.client.query_claim(claim_uri)
 
-        return body
+        return resp, body
 
     @classmethod
     def update_claim(cls, claim_uri, rbody):
         """Wrapper utility that updates a claim."""
-        body = cls.client.update_claim(claim_uri, rbody)
+        resp, body = cls.client.update_claim(claim_uri, rbody)
 
-        return body
+        return resp, body
 
     @classmethod
     def release_claim(cls, claim_uri):
         """Wrapper utility that deletes a claim."""
-        body = cls.client.release_claim(claim_uri)
+        resp, body = cls.client.release_claim(claim_uri)
 
-        return body
+        return resp, body
 
     @classmethod
     def generate_message_body(cls, repeat=1):
diff --git a/tempest/api/messaging/test_claims.py b/tempest/api/messaging/test_claims.py
index ef5e4f7..c9064b0 100644
--- a/tempest/api/messaging/test_claims.py
+++ b/tempest/api/messaging/test_claims.py
@@ -49,14 +49,14 @@
         claim_grace = data_utils.\
             rand_int_id(start=60, end=CONF.messaging.max_claim_grace)
         claim_body = {"ttl": claim_ttl, "grace": claim_grace}
-        body = self.client.post_claims(queue_name=self.queue_name,
-                                       rbody=claim_body)
+        resp, body = self.client.post_claims(queue_name=self.queue_name,
+                                             rbody=claim_body)
 
-        return body
+        return resp, body
 
     @test.attr(type='smoke')
     def test_post_claim(self):
-        body = self._post_and_claim_messages(queue_name=self.queue_name)
+        _, body = self._post_and_claim_messages(queue_name=self.queue_name)
         claimed_message_uri = body[0]['href']
 
         # Skipping this step till bug-1331517  is fixed
@@ -70,10 +70,10 @@
     @test.attr(type='smoke')
     def test_query_claim(self):
         # Post a Claim
-        body = self._post_and_claim_messages(queue_name=self.queue_name)
+        resp, body = self._post_and_claim_messages(queue_name=self.queue_name)
 
         # Query Claim
-        claim_uri = body.response['location']
+        claim_uri = resp['location']
         self.client.query_claim(claim_uri)
 
         # Delete Claimed message
@@ -84,9 +84,9 @@
     @test.attr(type='smoke')
     def test_update_claim(self):
         # Post a Claim
-        body = self._post_and_claim_messages(queue_name=self.queue_name)
+        resp, body = self._post_and_claim_messages(queue_name=self.queue_name)
 
-        claim_uri = body.response['location']
+        claim_uri = resp['location']
         claimed_message_uri = body[0]['href']
 
         # Update Claim
@@ -97,7 +97,7 @@
         self.client.update_claim(claim_uri, rbody=update_rbody)
 
         # Verify claim ttl >= updated ttl value
-        body = self.client.query_claim(claim_uri)
+        _, body = self.client.query_claim(claim_uri)
         updated_claim_ttl = body["ttl"]
         self.assertTrue(updated_claim_ttl >= claim_ttl)
 
@@ -107,8 +107,8 @@
     @test.attr(type='smoke')
     def test_release_claim(self):
         # Post a Claim
-        body = self._post_and_claim_messages(queue_name=self.queue_name)
-        claim_uri = body.response['location']
+        resp, body = self._post_and_claim_messages(queue_name=self.queue_name)
+        claim_uri = resp['location']
 
         # Release Claim
         self.client.release_claim(claim_uri)
diff --git a/tempest/api/messaging/test_messages.py b/tempest/api/messaging/test_messages.py
index 2345e9e..dca95fc 100644
--- a/tempest/api/messaging/test_messages.py
+++ b/tempest/api/messaging/test_messages.py
@@ -36,18 +36,18 @@
 
     def _post_messages(self, repeat=CONF.messaging.max_messages_per_page):
         message_body = self.generate_message_body(repeat=repeat)
-        body = self.post_messages(queue_name=self.queue_name,
-                                  rbody=message_body)
-        return body
+        resp, body = self.post_messages(queue_name=self.queue_name,
+                                        rbody=message_body)
+        return resp, body
 
     @test.attr(type='smoke')
     def test_post_messages(self):
         # Post Messages
-        resp = self._post_messages().response
+        resp, _ = self._post_messages()
 
         # Get on the posted messages
         message_uri = resp['location']
-        resp = self.client.get_multiple_messages(message_uri).response
+        resp, _ = self.client.get_multiple_messages(message_uri)
         # The test has an assertion here, because the response cannot be 204
         # in this case (the client allows 200 or 204 for this API call).
         self.assertEqual('200', resp['status'])
@@ -58,7 +58,7 @@
         self._post_messages()
 
         # List Messages
-        resp = self.list_messages(queue_name=self.queue_name).response
+        resp, _ = self.list_messages(queue_name=self.queue_name)
         # The test has an assertion here, because the response cannot be 204
         # in this case (the client allows 200 or 204 for this API call).
         self.assertEqual('200', resp['status'])
@@ -66,11 +66,11 @@
     @test.attr(type='smoke')
     def test_get_message(self):
         # Post Messages
-        body = self._post_messages()
+        _, body = self._post_messages()
         message_uri = body['resources'][0]
 
         # Get posted message
-        resp = self.client.get_single_message(message_uri).response
+        resp, _ = self.client.get_single_message(message_uri)
         # The test has an assertion here, because the response cannot be 204
         # in this case (the client allows 200 or 204 for this API call).
         self.assertEqual('200', resp['status'])
@@ -78,11 +78,11 @@
     @test.attr(type='smoke')
     def test_get_multiple_messages(self):
         # Post Messages
-        resp = self._post_messages().response
+        resp, _ = self._post_messages()
         message_uri = resp['location']
 
         # Get posted messages
-        resp = self.client.get_multiple_messages(message_uri).response
+        resp, _ = self.client.get_multiple_messages(message_uri)
         # The test has an assertion here, because the response cannot be 204
         # in this case (the client allows 200 or 204 for this API call).
         self.assertEqual('200', resp['status'])
@@ -90,14 +90,14 @@
     @test.attr(type='smoke')
     def test_delete_single_message(self):
         # Post Messages
-        body = self._post_messages()
+        _, body = self._post_messages()
         message_uri = body['resources'][0]
 
         # Delete posted message & verify the delete operration
         self.client.delete_messages(message_uri)
 
         message_uri = message_uri.replace('/messages/', '/messages?ids=')
-        resp = self.client.get_multiple_messages(message_uri).response
+        resp, _ = self.client.get_multiple_messages(message_uri)
         # The test has an assertion here, because the response has to be 204
         # in this case (the client allows 200 or 204 for this API call).
         self.assertEqual('204', resp['status'])
@@ -105,12 +105,12 @@
     @test.attr(type='smoke')
     def test_delete_multiple_messages(self):
         # Post Messages
-        resp = self._post_messages().response
+        resp, _ = self._post_messages()
         message_uri = resp['location']
 
         # Delete multiple messages
         self.client.delete_messages(message_uri)
-        resp = self.client.get_multiple_messages(message_uri).response
+        resp, _ = self.client.get_multiple_messages(message_uri)
         # The test has an assertion here, because the response has to be 204
         # in this case (the client allows 200 or 204 for this API call).
         self.assertEqual('204', resp['status'])
diff --git a/tempest/api/messaging/test_queues.py b/tempest/api/messaging/test_queues.py
index a8860f0..24656bf 100644
--- a/tempest/api/messaging/test_queues.py
+++ b/tempest/api/messaging/test_queues.py
@@ -33,7 +33,7 @@
     def test_create_delete_queue(self):
         # Create & Delete Queue
         queue_name = data_utils.rand_name('test-')
-        body = self.create_queue(queue_name)
+        _, body = self.create_queue(queue_name)
 
         self.addCleanup(self.client.delete_queue, queue_name)
         # NOTE(gmann): create_queue returns response status code as 201
@@ -74,7 +74,7 @@
     @test.attr(type='smoke')
     def test_list_queues(self):
         # Listing queues
-        body = self.list_queues()
+        _, body = self.list_queues()
         self.assertEqual(len(body['queues']), len(self.queues))
         for item in body['queues']:
             self.assertIn(item['name'], self.queues)
@@ -85,7 +85,7 @@
         queue_name = self.queues[data_utils.rand_int_id(0,
                                                         len(self.queues) - 1)]
         # Get Queue Stats for a newly created Queue
-        body = self.get_queue_stats(queue_name)
+        _, body = self.get_queue_stats(queue_name)
         msgs = body['messages']
         for element in ('free', 'claimed', 'total'):
             self.assertEqual(0, msgs[element])
@@ -98,7 +98,7 @@
         queue_name = self.queues[data_utils.rand_int_id(0,
                                                         len(self.queues) - 1)]
         # Check the Queue has no metadata
-        body = self.get_queue_metadata(queue_name)
+        _, body = self.get_queue_metadata(queue_name)
         self.assertThat(body, matchers.HasLength(0))
         # Create metadata
         key3 = [0, 1, 2, 3, 4]
@@ -112,7 +112,7 @@
         self.set_queue_metadata(queue_name, req_body)
 
         # Get Queue Metadata
-        body = self.get_queue_metadata(queue_name)
+        _, body = self.get_queue_metadata(queue_name)
         self.assertThat(body, matchers.Equals(req_body))
 
     @classmethod
diff --git a/tempest/services/messaging/json/messaging_client.py b/tempest/services/messaging/json/messaging_client.py
index 89aa87b..36444a9 100644
--- a/tempest/services/messaging/json/messaging_client.py
+++ b/tempest/services/messaging/json/messaging_client.py
@@ -50,51 +50,51 @@
         if resp['status'] != '204':
             body = json.loads(body)
             self.validate_response(queues_schema.list_queues, resp, body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def create_queue(self, queue_name):
         uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
         resp, body = self.put(uri, body=None)
         self.expected_success(201, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def get_queue(self, queue_name):
         uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
         resp, body = self.get(uri)
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def head_queue(self, queue_name):
         uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
         resp, body = self.head(uri)
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def delete_queue(self, queue_name):
         uri = '{0}/queues/{1}'.format(self.uri_prefix, queue_name)
         resp, body = self.delete(uri)
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def get_queue_stats(self, queue_name):
         uri = '{0}/queues/{1}/stats'.format(self.uri_prefix, queue_name)
         resp, body = self.get(uri)
         body = json.loads(body)
         self.validate_response(queues_schema.queue_stats, resp, body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def get_queue_metadata(self, queue_name):
         uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
         resp, body = self.get(uri)
         self.expected_success(200, resp.status)
         body = json.loads(body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def set_queue_metadata(self, queue_name, rbody):
         uri = '{0}/queues/{1}/metadata'.format(self.uri_prefix, queue_name)
         resp, body = self.put(uri, body=json.dumps(rbody))
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def post_messages(self, queue_name, rbody):
         uri = '{0}/queues/{1}/messages'.format(self.uri_prefix, queue_name)
@@ -104,7 +104,7 @@
 
         body = json.loads(body)
         self.validate_response(queues_schema.post_messages, resp, body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def list_messages(self, queue_name):
         uri = '{0}/queues/{1}/messages?echo=True'.format(self.uri_prefix,
@@ -115,7 +115,7 @@
             body = json.loads(body)
             self.validate_response(queues_schema.list_messages, resp, body)
 
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def get_single_message(self, message_uri):
         resp, body = self.get(message_uri, extra_headers=True,
@@ -124,7 +124,7 @@
             body = json.loads(body)
             self.validate_response(queues_schema.get_single_message, resp,
                                    body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def get_multiple_messages(self, message_uri):
         resp, body = self.get(message_uri, extra_headers=True,
@@ -136,12 +136,12 @@
                                    resp,
                                    body)
 
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def delete_messages(self, message_uri):
         resp, body = self.delete(message_uri)
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def post_claims(self, queue_name, rbody, url_params=False):
         uri = '{0}/queues/{1}/claims'.format(self.uri_prefix, queue_name)
@@ -154,7 +154,7 @@
 
         body = json.loads(body)
         self.validate_response(queues_schema.claim_messages, resp, body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def query_claim(self, claim_uri):
         resp, body = self.get(claim_uri)
@@ -162,14 +162,14 @@
         if resp['status'] != '204':
             body = json.loads(body)
             self.validate_response(queues_schema.query_claim, resp, body)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def update_claim(self, claim_uri, rbody):
         resp, body = self.patch(claim_uri, body=json.dumps(rbody))
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
 
     def release_claim(self, claim_uri):
         resp, body = self.delete(claim_uri)
         self.expected_success(204, resp.status)
-        return service_client.ResponseBody(resp, body)
+        return resp, body
