diff --git a/tempest/common/utils/data_utils.py b/tempest/common/utils/data_utils.py
index 2d540f4..752bc10 100644
--- a/tempest/common/utils/data_utils.py
+++ b/tempest/common/utils/data_utils.py
@@ -37,3 +37,10 @@
         url += urllib.urlencode(params)
 
     return url
+
+
+def parse_image_id(image_ref):
+    """Return the image id from a given image ref"""
+    temp = image_ref.rsplit('/')
+    #Return the last item, which is the image id
+    return temp[len(temp) - 1]
diff --git a/tempest/services/nova/json/servers_client.py b/tempest/services/nova/json/servers_client.py
index 08ac6df..53b2d6f 100644
--- a/tempest/services/nova/json/servers_client.py
+++ b/tempest/services/nova/json/servers_client.py
@@ -21,6 +21,7 @@
         flavor_ref (Required): The flavor used to build the server.
         Following optional keyword arguments are accepted:
         adminPass: Sets the initial root password.
+        key_name: Key name of keypair that was created earlier.
         meta: A dictionary of values to be used as metadata.
         personality: A list of dictionaries for files to be injected into
         the server.
@@ -40,7 +41,7 @@
             'flavorRef': flavor_ref
         }
 
-        for option in ['personality', 'adminPass',
+        for option in ['personality', 'adminPass', 'key_name',
                         'security_groups', 'networks', 'user_data',
                         'availability_zone', 'accessIPv4', 'accessIPv6',
                         'min_count', 'max_count', ('metadata', 'meta'),
diff --git a/tempest/tests/test_authorization.py b/tempest/tests/test_authorization.py
index 9f3c34d..e66446d 100644
--- a/tempest/tests/test_authorization.py
+++ b/tempest/tests/test_authorization.py
@@ -4,9 +4,7 @@
 from nose.tools import raises
 
 from tempest import openstack
-from tempest.services.nova.json.images_client import ImagesClient
-from tempest.services.nova.json.servers_client import ServersClient
-from tempest.common.utils.data_utils import rand_name
+from tempest.common.utils.data_utils import rand_name, parse_image_id
 from tempest import exceptions
 from tempest.tests import utils
 
@@ -53,7 +51,7 @@
 
                 name = rand_name('image')
                 resp, body = cls.client.create_image(server['id'], name)
-                image_id = cls._parse_image_id(resp['location'])
+                image_id = parse_image_id(resp['location'])
                 cls.images_client.wait_for_image_resp_code(image_id, 200)
                 cls.images_client.wait_for_image_status(image_id, 'ACTIVE')
                 resp, cls.image = cls.images_client.get_image(image_id)
@@ -162,9 +160,3 @@
         finally:
             # Reset the base_url...
             self.other_client.base_url = saved_base_url
-
-    @classmethod
-    def _parse_image_id(self, image_ref):
-        temp = image_ref.rsplit('/')
-        #Return the last item, which is the image id
-        return temp[len(temp) - 1]
diff --git a/tempest/tests/test_floating_ips_actions.py b/tempest/tests/test_floating_ips_actions.py
index cc69048..563d0e3 100644
--- a/tempest/tests/test_floating_ips_actions.py
+++ b/tempest/tests/test_floating_ips_actions.py
@@ -11,7 +11,6 @@
 
     @classmethod
     def setUpClass(cls):
-        cls.os = openstack.Manager()
         cls.client = cls.floating_ips_client
         cls.servers_client = cls.servers_client
 
@@ -49,16 +48,18 @@
         Positive test:Allocation of a new floating IP to a project
         should be succesfull
         """
-        resp, body = self.client.create_floating_ip()
-        self.assertEqual(200, resp.status)
-        floating_ip_id_allocated = body['id']
-        resp, floating_ip_details = \
+        try:
+            resp, body = self.client.create_floating_ip()
+            self.assertEqual(200, resp.status)
+            floating_ip_id_allocated = body['id']
+            resp, floating_ip_details = \
                 self.client.get_floating_ip_details(floating_ip_id_allocated)
-        #Checking if the details of allocated IP is in list of floating IP
-        resp, body = self.client.list_floating_ips()
-        self.assertTrue(floating_ip_details in body)
-        #Deleting the floating IP which is created in this method
-        self.client.delete_floating_ip(floating_ip_id_allocated)
+            #Checking if the details of allocated IP is in list of floating IP
+            resp, body = self.client.list_floating_ips()
+            self.assertTrue(floating_ip_details in body)
+        finally:
+            #Deleting the floating IP which is created in this method
+            self.client.delete_floating_ip(floating_ip_id_allocated)
 
     @attr(type='positive')
     def test_delete_floating_ip(self):
diff --git a/tempest/tests/test_images.py b/tempest/tests/test_images.py
index 716da65..33020d6 100644
--- a/tempest/tests/test_images.py
+++ b/tempest/tests/test_images.py
@@ -5,11 +5,7 @@
 from base_compute_test import BaseComputeTest
 import tempest.config
 from tempest import openstack
-
-
-def _parse_image_id(image_ref):
-    temp = image_ref.rsplit('images/')
-    return temp[1]
+from tempest.common.utils import data_utils
 
 
 class ImagesTest(BaseComputeTest):
@@ -38,7 +34,7 @@
         name = rand_name('image')
         meta = {'image_type': 'test'}
         resp, body = self.client.create_image(server['id'], name, meta)
-        image_id = _parse_image_id(resp['location'])
+        image_id = data_utils.parse_image_id(resp['location'])
         self.client.wait_for_image_resp_code(image_id, 200)
         self.client.wait_for_image_status(image_id, 'ACTIVE')
 
@@ -78,7 +74,7 @@
             pass
 
         else:
-            image_id = _parse_image_id(resp['location'])
+            image_id = data_utils.parse_image_id(resp['location'])
             self.client.wait_for_image_resp_code(image_id, 200)
             self.client.wait_for_image_status(image_id, 'ACTIVE')
             self.client.delete_image(image_id)
diff --git a/tempest/tests/test_keypairs.py b/tempest/tests/test_keypairs.py
index 14e1317..fde9de1 100644
--- a/tempest/tests/test_keypairs.py
+++ b/tempest/tests/test_keypairs.py
@@ -10,7 +10,6 @@
 
     @classmethod
     def setUpClass(cls):
-        cls.os = openstack.Manager()
         cls.client = cls.keypairs_client
 
     @attr(type='smoke')
diff --git a/tempest/tests/test_list_floating_ips.py b/tempest/tests/test_list_floating_ips.py
index d100c01..03ed089 100644
--- a/tempest/tests/test_list_floating_ips.py
+++ b/tempest/tests/test_list_floating_ips.py
@@ -39,23 +39,25 @@
     def test_get_floating_ip_details(self):
         """Positive test:Should be able to GET the details of floatingIP"""
         #Creating a floating IP for which details are to be checked
-        resp, body = self.client.create_floating_ip()
-        floating_ip_instance_id = body['instance_id']
-        floating_ip_ip = body['ip']
-        floating_ip_fixed_ip = body['fixed_ip']
-        floating_ip_id = body['id']
-        resp, body = \
-            self.client.get_floating_ip_details(floating_ip_id)
-        self.assertEqual(200, resp.status)
-        #Comparing the details of floating IP
-        self.assertEqual(floating_ip_instance_id,
+        try:
+            resp, body = self.client.create_floating_ip()
+            floating_ip_instance_id = body['instance_id']
+            floating_ip_ip = body['ip']
+            floating_ip_fixed_ip = body['fixed_ip']
+            floating_ip_id = body['id']
+            resp, body = \
+                self.client.get_floating_ip_details(floating_ip_id)
+            self.assertEqual(200, resp.status)
+            #Comparing the details of floating IP
+            self.assertEqual(floating_ip_instance_id,
                             body['instance_id'])
-        self.assertEqual(floating_ip_ip, body['ip'])
-        self.assertEqual(floating_ip_fixed_ip,
+            self.assertEqual(floating_ip_ip, body['ip'])
+            self.assertEqual(floating_ip_fixed_ip,
                             body['fixed_ip'])
-        self.assertEqual(floating_ip_id, body['id'])
+            self.assertEqual(floating_ip_id, body['id'])
         #Deleting the floating IP created in this method
-        self.client.delete_floating_ip(floating_ip_id)
+        finally:
+            self.client.delete_floating_ip(floating_ip_id)
 
     @attr(type='negative')
     @unittest.skip('Skipping until Nova Bug 940500 is fixed')
diff --git a/tempest/tests/test_list_images.py b/tempest/tests/test_list_images.py
index 9d2bb1b..810e933 100644
--- a/tempest/tests/test_list_images.py
+++ b/tempest/tests/test_list_images.py
@@ -1,14 +1,8 @@
 from nose.plugins.attrib import attr
 
 from tempest import exceptions
-from tempest import openstack
 from base_compute_test import BaseComputeTest
-from tempest.common.utils.data_utils import rand_name
-
-
-def _parse_image_id(image_ref):
-    temp = image_ref.rsplit('/')
-    return temp[len(temp) - 1]
+from tempest.common.utils.data_utils import rand_name, parse_image_id
 
 
 class ListImagesTest(BaseComputeTest):
@@ -31,7 +25,7 @@
         # Create images to be used in the filter tests
         image1_name = rand_name('image')
         resp, body = cls.client.create_image(cls.server1['id'], image1_name)
-        cls.image1_id = _parse_image_id(resp['location'])
+        cls.image1_id = parse_image_id(resp['location'])
         cls.client.wait_for_image_resp_code(cls.image1_id, 200)
         cls.client.wait_for_image_status(cls.image1_id, 'ACTIVE')
         resp, cls.image1 = cls.client.get_image(cls.image1_id)
@@ -41,14 +35,14 @@
         # server will sometimes cause failures
         image3_name = rand_name('image')
         resp, body = cls.client.create_image(cls.server2['id'], image3_name)
-        cls.image3_id = _parse_image_id(resp['location'])
+        cls.image3_id = parse_image_id(resp['location'])
         cls.client.wait_for_image_resp_code(cls.image3_id, 200)
         cls.client.wait_for_image_status(cls.image3_id, 'ACTIVE')
         resp, cls.image3 = cls.client.get_image(cls.image3_id)
 
         image2_name = rand_name('image')
         resp, body = cls.client.create_image(cls.server1['id'], image2_name)
-        cls.image2_id = _parse_image_id(resp['location'])
+        cls.image2_id = parse_image_id(resp['location'])
         cls.client.wait_for_image_resp_code(cls.image2_id, 200)
         cls.client.wait_for_image_status(cls.image2_id, 'ACTIVE')
         resp, cls.image2 = cls.client.get_image(cls.image2_id)
diff --git a/tempest/tests/test_servers.py b/tempest/tests/test_servers.py
index 414d58a..b152b4c 100644
--- a/tempest/tests/test_servers.py
+++ b/tempest/tests/test_servers.py
@@ -54,58 +54,65 @@
         password should be set to that password.
         """
 
-        name = rand_name('server')
-        resp, server = self.client.create_server(name, self.image_ref,
+        try:
+            name = rand_name('server')
+            resp, server = self.client.create_server(name, self.image_ref,
                                                  self.flavor_ref,
                                                  adminPass='testpassword')
 
-        #Verify the password is set correctly in the response
-        self.assertEqual('testpassword', server['adminPass'])
+            #Verify the password is set correctly in the response
+            self.assertEqual('testpassword', server['adminPass'])
 
         #Teardown
-        self.client.delete_server(server['id'])
+        finally:
+            self.client.delete_server(server['id'])
 
     @attr(type='smoke')
     def test_update_server_name(self):
         """The server name should be changed to the the provided value"""
-        name = rand_name('server')
-        resp, server = self.client.create_server(name, self.image_ref,
+        try:
+            name = rand_name('server')
+            resp, server = self.client.create_server(name, self.image_ref,
                                                  self.flavor_ref)
-        self.client.wait_for_server_status(server['id'], 'ACTIVE')
+            self.client.wait_for_server_status(server['id'], 'ACTIVE')
 
-        #Update the server with a new name
-        resp, server = self.client.update_server(server['id'], name='newname')
-        self.assertEquals(200, resp.status)
-        self.client.wait_for_server_status(server['id'], 'ACTIVE')
+            #Update the server with a new name
+            resp, server = self.client.update_server(server['id'],
+                                                 name='newname')
+            self.assertEquals(200, resp.status)
+            self.client.wait_for_server_status(server['id'], 'ACTIVE')
 
-        #Verify the name of the server has changed
-        resp, server = self.client.get_server(server['id'])
-        self.assertEqual('newname', server['name'])
+            #Verify the name of the server has changed
+            resp, server = self.client.get_server(server['id'])
+            self.assertEqual('newname', server['name'])
 
         #Teardown
-        self.client.delete_server(server['id'])
+        finally:
+            self.client.delete_server(server['id'])
 
     @attr(type='smoke')
     def test_update_access_server_address(self):
         """
         The server's access addresses should reflect the provided values
         """
-        name = rand_name('server')
-        resp, server = self.client.create_server(name, self.image_ref,
+        try:
+            name = rand_name('server')
+            resp, server = self.client.create_server(name, self.image_ref,
                                                  self.flavor_ref)
-        self.client.wait_for_server_status(server['id'], 'ACTIVE')
+            self.client.wait_for_server_status(server['id'], 'ACTIVE')
 
-        #Update the IPv4 and IPv6 access addresses
-        resp, body = self.client.update_server(server['id'],
+            #Update the IPv4 and IPv6 access addresses
+            resp, body = self.client.update_server(server['id'],
                                                accessIPv4='1.1.1.1',
                                                accessIPv6='::babe:2.2.2.2')
-        self.assertEqual(200, resp.status)
-        self.client.wait_for_server_status(server['id'], 'ACTIVE')
+            self.assertEqual(200, resp.status)
+            self.client.wait_for_server_status(server['id'], 'ACTIVE')
 
-        #Verify the access addresses have been updated
-        resp, server = self.client.get_server(server['id'])
-        self.assertEqual('1.1.1.1', server['accessIPv4'])
-        self.assertEqual('::babe:2.2.2.2', server['accessIPv6'])
+            #Verify the access addresses have been updated
+            resp, server = self.client.get_server(server['id'])
+            self.assertEqual('1.1.1.1', server['accessIPv4'])
+            self.assertEqual('::babe:2.2.2.2', server['accessIPv6'])
 
         #Teardown
-        self.client.delete_server(server['id'])
+        finally:
+            self.client.delete_server(server['id'])
