diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 8429cd0..2c1b07c 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -310,3 +310,10 @@
 
 # Status change wait interval
 build_interval = 1
+
+[general]
+#This section contains configuration options that are used for all of tempest
+#that are not specific to a single project or API
+
+#Use xml containe for tests that support both JSON and XML?
+use_xml = False
diff --git a/tempest/clients.py b/tempest/clients.py
index ac163b6..146acd4 100644
--- a/tempest/clients.py
+++ b/tempest/clients.py
@@ -141,8 +141,7 @@
     Top level manager for OpenStack Compute clients
     """
 
-    def __init__(self, username=None, password=None, tenant_name=None,
-                 interface='json'):
+    def __init__(self, username=None, password=None, tenant_name=None):
         """
         We allow overriding of the credentials used within the various
         client classes managed by the Manager object. Left as None, the
@@ -159,6 +158,10 @@
         self.username = username or self.config.compute.username
         self.password = password or self.config.compute.password
         self.tenant_name = tenant_name or self.config.compute.tenant_name
+        if self.config.general.use_xml:
+            interface = 'xml'
+        else:
+            interface = 'json'
 
         if None in (self.username, self.password, self.tenant_name):
             msg = ("Missing required credentials. "
@@ -229,12 +232,11 @@
     managed client objects
     """
 
-    def __init__(self, interface='json'):
+    def __init__(self):
         conf = config.TempestConfig()
         super(AdminManager, self).__init__(conf.compute_admin.username,
                                            conf.compute_admin.password,
-                                           conf.compute_admin.tenant_name,
-                                           interface=interface)
+                                           conf.compute_admin.tenant_name)
 
 
 class ServiceManager(object):
@@ -257,12 +259,11 @@
     managed client objects
     """
 
-    def __init__(self, interface='json'):
+    def __init__(self):
         conf = config.TempestConfig()
         super(IdentityManager, self).__init__(conf.identity_admin.username,
                                               conf.identity_admin.password,
-                                              conf.identity_admin.tenant_name,
-                                              interface)
+                                              conf.identity_admin.tenant_name)
 
 
 class IdentityNaManager(Manager):
@@ -272,9 +273,8 @@
     managed client objects
     """
 
-    def __init__(self, interface='json'):
+    def __init__(self):
         conf = config.TempestConfig()
         super(IdentityNaManager, self).__init__(conf.compute.username,
                                                 conf.compute.password,
-                                                conf.compute.tenant_name,
-                                                interface)
+                                                conf.compute.tenant_name)
diff --git a/tempest/config.py b/tempest/config.py
index 70b1c79..66e0d5d 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -461,6 +461,20 @@
     for opt in BotoConfig:
         conf.register_opt(opt, group='boto')
 
+general_group = cfg.OptGroup(name='general', title='General Tempest Options')
+
+GeneralOpts = [
+    cfg.BoolOpt('use_xml',
+                default=False,
+                help="Use xml for the container format"),
+]
+
+
+def register_general_opts(conf):
+    conf.register_group(general_group)
+    for opt in GeneralOpts:
+        conf.register_opt(opt, group='general')
+
 
 # TODO(jaypipes): Move this to a common utils (not data_utils...)
 def singleton(cls):
@@ -518,6 +532,7 @@
         register_volume_opts(cfg.CONF)
         register_object_storage_opts(cfg.CONF)
         register_boto_opts(cfg.CONF)
+        register_general_opts(cfg.CONF)
         self.compute = cfg.CONF.compute
         self.compute_admin = cfg.CONF['compute-admin']
         self.identity = cfg.CONF.identity
@@ -528,3 +543,4 @@
         self.volume = cfg.CONF.volume
         self.object_storage = cfg.CONF['object-storage']
         self.boto = cfg.CONF.boto
+        self.general = cfg.CONF.general
diff --git a/tempest/tests/compute/admin/test_flavors.py b/tempest/tests/compute/admin/test_flavors.py
index 8172bd4..eb873bd 100644
--- a/tempest/tests/compute/admin/test_flavors.py
+++ b/tempest/tests/compute/admin/test_flavors.py
@@ -19,9 +19,12 @@
 from nose.plugins.attrib import attr
 import unittest2 as unittest
 
+from tempest import config
 from tempest.tests import compute
 from tempest.tests.compute import base
 
+CONF = config.TempestConfig()
+
 
 class FlavorsAdminTestBase(object):
 
@@ -68,12 +71,12 @@
             self.assertEqual(flavor['rxtx_factor'], self.rxtx)
             self.assertEqual(flavor['OS-FLV-EXT-DATA:ephemeral'],
                              self.ephemeral)
-            if self._interface == "xml":
+            if CONF.general.use_xml:
                 XMLNS_OS_FLV_ACCESS = "http://docs.openstack.org/compute/ext/"\
                     "flavor_access/api/v2"
                 key = "{" + XMLNS_OS_FLV_ACCESS + "}is_public"
                 self.assertEqual(flavor[key], "True")
-            if self._interface == "json":
+            else:
                 self.assertEqual(flavor['os-flavor-access:is_public'], True)
 
             #Verify flavor is retrieved
@@ -164,12 +167,12 @@
             self.assertEqual(flavor['swap'], '')
             self.assertEqual(int(flavor['rxtx_factor']), 1)
             self.assertEqual(int(flavor['OS-FLV-EXT-DATA:ephemeral']), 0)
-            if self._interface == "xml":
+            if CONF.general.use_xml:
                 XMLNS_OS_FLV_ACCESS = "http://docs.openstack.org/compute/ext/"\
                     "flavor_access/api/v2"
                 key = "{" + XMLNS_OS_FLV_ACCESS + "}is_public"
                 self.assertEqual(flavor[key], "True")
-            if self._interface == "json":
+            else:
                 self.assertEqual(flavor['os-flavor-access:is_public'], True)
 
             #Verify flavor is retrieved
@@ -241,23 +244,11 @@
             self.client.wait_for_resource_deletion(self.new_flavor_id)
 
 
-class FlavorsAdminTestXML(base.BaseComputeAdminTestXML,
-                          base.BaseComputeTestXML,
-                          FlavorsAdminTestBase):
+class FlavorsAdminTest(base.BaseComputeAdminTest, base.BaseCompTest,
+                       FlavorsAdminTestBase):
 
     @classmethod
     def setUpClass(cls):
-        super(FlavorsAdminTestXML, cls).setUpClass()
-        base.BaseComputeTestXML.setUpClass()
-        FlavorsAdminTestBase.setUpClass(cls)
-
-
-class FlavorsAdminTestJSON(base.BaseComputeAdminTestJSON,
-                           base.BaseComputeTestJSON,
-                           FlavorsAdminTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(FlavorsAdminTestJSON, cls).setUpClass()
-        base.BaseComputeTestJSON.setUpClass()
+        super(FlavorsAdminTest, cls).setUpClass()
+        base.BaseCompTest.setUpClass()
         FlavorsAdminTestBase.setUpClass(cls)
diff --git a/tempest/tests/compute/admin/test_quotas.py b/tempest/tests/compute/admin/test_quotas.py
index eaf245a..ca58c6a 100644
--- a/tempest/tests/compute/admin/test_quotas.py
+++ b/tempest/tests/compute/admin/test_quotas.py
@@ -19,10 +19,10 @@
 
 from tempest import exceptions
 from tempest.services.compute.admin.json import quotas_client as adm_quotas
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class QuotasTest(BaseComputeTest):
+class QuotasTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/base.py b/tempest/tests/compute/base.py
index c44a2f1..d1cf522 100644
--- a/tempest/tests/compute/base.py
+++ b/tempest/tests/compute/base.py
@@ -26,8 +26,7 @@
 from tempest import config
 from tempest import exceptions
 
-__all__ = ['BaseComputeTest', 'BaseComputeTestJSON', 'BaseComputeTestXML',
-           'BaseComputeAdminTestJSON', 'BaseComputeAdminTestXML']
+__all__ = ['BaseCompTest', 'BaseComputeAdminTest']
 
 LOG = logging.getLogger(__name__)
 
@@ -46,10 +45,9 @@
             username, tenant_name, password = creds
             os = clients.Manager(username=username,
                                  password=password,
-                                 tenant_name=tenant_name,
-                                 interface=cls._interface)
+                                 tenant_name=tenant_name)
         else:
-            os = clients.Manager(interface=cls._interface)
+            os = clients.Manager()
 
         cls.os = os
         cls.servers_client = os.servers_client
@@ -78,7 +76,7 @@
         """
         Returns an instance of the Identity Admin API client
         """
-        os = clients.IdentityManager(interface=cls._interface)
+        os = clients.IdentityManager()
         admin_client = os.admin_client
         return admin_client
 
@@ -227,23 +225,6 @@
             time.sleep(self.build_interval)
 
 
-class BaseComputeTestJSON(BaseCompTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(BaseComputeTestJSON, cls).setUpClass()
-
-# NOTE(danms): For transition, keep the old name active as JSON
-BaseComputeTest = BaseComputeTestJSON
-
-
-class BaseComputeTestXML(BaseCompTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "xml"
-        super(BaseComputeTestXML, cls).setUpClass()
-
-
 class BaseComputeAdminTest(unittest.TestCase):
 
     """Base test case class for all Compute Admin API tests."""
@@ -260,18 +241,4 @@
                    "in configuration.")
             raise nose.SkipTest(msg)
 
-        cls.os = clients.AdminManager(interface=cls._interface)
-
-
-class BaseComputeAdminTestJSON(BaseComputeAdminTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(BaseComputeAdminTestJSON, cls).setUpClass()
-
-
-class BaseComputeAdminTestXML(BaseComputeAdminTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "xml"
-        super(BaseComputeAdminTestXML, cls).setUpClass()
+        cls.os = clients.AdminManager()
diff --git a/tempest/tests/compute/flavors/test_flavors.py b/tempest/tests/compute/flavors/test_flavors.py
index 53cad65..bf56464 100644
--- a/tempest/tests/compute/flavors/test_flavors.py
+++ b/tempest/tests/compute/flavors/test_flavors.py
@@ -137,19 +137,9 @@
                           9999)
 
 
-class FlavorsTestXML(base.BaseComputeTestXML,
-                     FlavorsTestBase):
+class FlavorsTest(base.BaseCompTest, FlavorsTestBase):
 
     @classmethod
     def setUpClass(cls):
-        super(FlavorsTestXML, cls).setUpClass()
-        cls.client = cls.flavors_client
-
-
-class FlavorsTestJSON(base.BaseComputeTestJSON,
-                      FlavorsTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(FlavorsTestJSON, cls).setUpClass()
+        super(FlavorsTest, cls).setUpClass()
         cls.client = cls.flavors_client
diff --git a/tempest/tests/compute/floating_ips/test_floating_ips_actions.py b/tempest/tests/compute/floating_ips/test_floating_ips_actions.py
index 9a9914a..e81022c 100644
--- a/tempest/tests/compute/floating_ips/test_floating_ips_actions.py
+++ b/tempest/tests/compute/floating_ips/test_floating_ips_actions.py
@@ -205,25 +205,13 @@
                       ' with out passing floating IP  should raise BadRequest')
 
 
-class FloatingIPsTestJSON(base.BaseComputeTestJSON, FloatingIPsTestBase):
+class FloatingIPsTest(base.BaseCompTest, FloatingIPsTestBase):
     @classmethod
     def setUpClass(cls):
-        super(FloatingIPsTestJSON, cls).setUpClass()
+        super(FloatingIPsTest, cls).setUpClass()
         FloatingIPsTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
         FloatingIPsTestBase.tearDownClass(cls)
-        super(FloatingIPsTestJSON, cls).tearDownClass()
-
-
-class FloatingIPsTestXML(base.BaseComputeTestXML, FloatingIPsTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(FloatingIPsTestXML, cls).setUpClass()
-        FloatingIPsTestBase.setUpClass(cls)
-
-    @classmethod
-    def tearDownClass(cls):
-        FloatingIPsTestBase.tearDownClass(cls)
-        super(FloatingIPsTestXML, cls).tearDownClass()
+        super(FloatingIPsTest, cls).tearDownClass()
diff --git a/tempest/tests/compute/floating_ips/test_list_floating_ips.py b/tempest/tests/compute/floating_ips/test_list_floating_ips.py
index 9eec27c..4fbe4eb 100644
--- a/tempest/tests/compute/floating_ips/test_list_floating_ips.py
+++ b/tempest/tests/compute/floating_ips/test_list_floating_ips.py
@@ -99,27 +99,13 @@
                       'nonexistant floating IP')
 
 
-class FloatingIPDetailsTestJSON(base.BaseComputeTestJSON,
-                                FloatingIPDetailsTestBase):
+class FloatingIPDetailsTest(base.BaseCompTest, FloatingIPDetailsTestBase):
     @classmethod
     def setUpClass(cls):
-        super(FloatingIPDetailsTestJSON, cls).setUpClass()
+        super(FloatingIPDetailsTest, cls).setUpClass()
         FloatingIPDetailsTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
         FloatingIPDetailsTestBase.tearDownClass(cls)
-        super(FloatingIPDetailsTestJSON, cls).tearDownClass()
-
-
-class FloatingIPDetailsTestXML(base.BaseComputeTestXML,
-                               FloatingIPDetailsTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(FloatingIPDetailsTestXML, cls).setUpClass()
-        FloatingIPDetailsTestBase.setUpClass(cls)
-
-    @classmethod
-    def tearDownClass(cls):
-        FloatingIPDetailsTestBase.tearDownClass(cls)
-        super(FloatingIPDetailsTestXML, cls).tearDownClass()
+        super(FloatingIPDetailsTest, cls).tearDownClass()
diff --git a/tempest/tests/compute/images/test_image_metadata.py b/tempest/tests/compute/images/test_image_metadata.py
index cdf4249..66c051e 100644
--- a/tempest/tests/compute/images/test_image_metadata.py
+++ b/tempest/tests/compute/images/test_image_metadata.py
@@ -19,10 +19,10 @@
 
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ImagesMetadataTest(BaseComputeTest):
+class ImagesMetadataTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/images/test_images.py b/tempest/tests/compute/images/test_images.py
index 2557f16..8bea257 100644
--- a/tempest/tests/compute/images/test_images.py
+++ b/tempest/tests/compute/images/test_images.py
@@ -213,40 +213,13 @@
                       "exceeds 35 character ID length limit")
 
 
-class ImagesTestJSON(base.BaseComputeTestJSON,
-                     ImagesTestBase):
+class ImagesTest(base.BaseCompTest, ImagesTestBase):
     def tearDown(self):
         ImagesTestBase.tearDown(self)
 
     @classmethod
     def setUpClass(cls):
-        super(ImagesTestJSON, cls).setUpClass()
-        cls.client = cls.images_client
-        cls.servers_client = cls.servers_client
-
-        cls.image_ids = []
-
-        if compute.MULTI_USER:
-            if cls.config.compute.allow_tenant_isolation:
-                creds = cls._get_isolated_creds()
-                username, tenant_name, password = creds
-                cls.alt_manager = clients.Manager(username=username,
-                                                  password=password,
-                                                  tenant_name=tenant_name)
-            else:
-                # Use the alt_XXX credentials in the config file
-                cls.alt_manager = clients.AltManager()
-            cls.alt_client = cls.alt_manager.images_client
-
-
-class ImagesTestXML(base.BaseComputeTestXML,
-                    ImagesTestBase):
-    def tearDown(self):
-        ImagesTestBase.tearDown(self)
-
-    @classmethod
-    def setUpClass(cls):
-        super(ImagesTestXML, cls).setUpClass()
+        super(ImagesTest, cls).setUpClass()
         cls.client = cls.images_client
         cls.servers_client = cls.servers_client
 
diff --git a/tempest/tests/compute/images/test_images_oneserver.py b/tempest/tests/compute/images/test_images_oneserver.py
index f8b560b..27c73f4 100644
--- a/tempest/tests/compute/images/test_images_oneserver.py
+++ b/tempest/tests/compute/images/test_images_oneserver.py
@@ -187,43 +187,14 @@
         self.assertRaises(exceptions.NotFound, self.client.get_image, image_id)
 
 
-class ImagesOneServerTestJSON(base.BaseComputeTestJSON,
-                              ImagesOneServerTestBase):
+class ImagesOneServerTest(base.BaseCompTest, ImagesOneServerTestBase):
 
     def tearDown(self):
         ImagesOneServerTestBase.tearDown(self)
 
     @classmethod
     def setUpClass(cls):
-        super(ImagesOneServerTestJSON, cls).setUpClass()
-        cls.client = cls.images_client
-        cls.servers_client = cls.servers_client
-        cls.server = cls.create_server()
-
-        cls.image_ids = []
-
-        if compute.MULTI_USER:
-            if cls.config.compute.allow_tenant_isolation:
-                creds = cls._get_isolated_creds()
-                username, tenant_name, password = creds
-                cls.alt_manager = clients.Manager(username=username,
-                                                  password=password,
-                                                  tenant_name=tenant_name)
-            else:
-                # Use the alt_XXX credentials in the config file
-                cls.alt_manager = clients.AltManager()
-            cls.alt_client = cls.alt_manager.images_client
-
-
-class ImagesOneServerTestXML(base.BaseComputeTestXML,
-                             ImagesOneServerTestBase):
-
-    def tearDown(self):
-        ImagesOneServerTestBase.tearDown(self)
-
-    @classmethod
-    def setUpClass(cls):
-        super(ImagesOneServerTestXML, cls).setUpClass()
+        super(ImagesOneServerTest, cls).setUpClass()
         cls.client = cls.images_client
         cls.servers_client = cls.servers_client
         cls.server = cls.create_server()
diff --git a/tempest/tests/compute/images/test_images_whitebox.py b/tempest/tests/compute/images/test_images_whitebox.py
index 2987534..a615761 100644
--- a/tempest/tests/compute/images/test_images_whitebox.py
+++ b/tempest/tests/compute/images/test_images_whitebox.py
@@ -24,7 +24,7 @@
 
 
 @attr(type='whitebox')
-class ImagesWhiteboxTest(whitebox.ComputeWhiteboxTest, base.BaseComputeTest):
+class ImagesWhiteboxTest(whitebox.ComputeWhiteboxTest, base.BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/images/test_list_image_filters.py b/tempest/tests/compute/images/test_list_image_filters.py
index 26119e3..1b1baff 100644
--- a/tempest/tests/compute/images/test_list_image_filters.py
+++ b/tempest/tests/compute/images/test_list_image_filters.py
@@ -20,10 +20,10 @@
 from tempest.common.utils.data_utils import parse_image_id
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ListImageFiltersTest(BaseComputeTest):
+class ListImageFiltersTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/images/test_list_images.py b/tempest/tests/compute/images/test_list_images.py
index da92ca8..6b5ca10 100644
--- a/tempest/tests/compute/images/test_list_images.py
+++ b/tempest/tests/compute/images/test_list_images.py
@@ -20,10 +20,10 @@
 from tempest.common.utils.data_utils import parse_image_id
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ListImagesTest(BaseComputeTest):
+class ListImagesTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/keypairs/test_keypairs.py b/tempest/tests/compute/keypairs/test_keypairs.py
index 7d95a9b..e3a97cf 100644
--- a/tempest/tests/compute/keypairs/test_keypairs.py
+++ b/tempest/tests/compute/keypairs/test_keypairs.py
@@ -20,8 +20,7 @@
 
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTestJSON
-from tempest.tests.compute.base import BaseComputeTestXML
+from tempest.tests.compute.base import BaseCompTest
 
 
 class KeyPairsTestBase(object):
@@ -222,15 +221,8 @@
             self.fail('invalid name')
 
 
-class KeyPairsTestXML(BaseComputeTestXML, KeyPairsTestBase):
+class KeyPairsTest(BaseCompTest, KeyPairsTestBase):
     @classmethod
     def setUpClass(cls):
-        super(KeyPairsTestXML, cls).setUpClass()
-        cls.client = cls.keypairs_client
-
-
-class KeyPairsTestJSON(BaseComputeTestJSON, KeyPairsTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(KeyPairsTestJSON, cls).setUpClass()
+        super(KeyPairsTest, cls).setUpClass()
         cls.client = cls.keypairs_client
diff --git a/tempest/tests/compute/limits/test_absolute_limits.py b/tempest/tests/compute/limits/test_absolute_limits.py
index 89c5b25..2e201fe 100644
--- a/tempest/tests/compute/limits/test_absolute_limits.py
+++ b/tempest/tests/compute/limits/test_absolute_limits.py
@@ -20,7 +20,7 @@
 from tempest.tests.compute import base
 
 
-class AbsoluteLimitsTest(object):
+class AbsoluteLimitsTestBase(object):
 
     @staticmethod
     def setUpClass(cls):
@@ -50,17 +50,8 @@
                          % ', '.join(ele for ele in missing_elements))
 
 
-class AbsoluteLimitsTestJSON(base.BaseComputeTestJSON,
-                             AbsoluteLimitsTest):
+class AbsoluteLimitsTest(base.BaseCompTest, AbsoluteLimitsTestBase):
     @classmethod
     def setUpClass(cls):
-        super(AbsoluteLimitsTestJSON, cls).setUpClass()
-        AbsoluteLimitsTest.setUpClass(cls)
-
-
-class AbsoluteLimitsTestXML(base.BaseComputeTestXML,
-                            AbsoluteLimitsTest):
-    @classmethod
-    def setUpClass(cls):
-        super(AbsoluteLimitsTestXML, cls).setUpClass()
-        AbsoluteLimitsTest.setUpClass(cls)
+        super(AbsoluteLimitsTest, cls).setUpClass()
+        AbsoluteLimitsTestBase.setUpClass(cls)
diff --git a/tempest/tests/compute/security_groups/test_security_group_rules.py b/tempest/tests/compute/security_groups/test_security_group_rules.py
index 805adf4..19e10a4 100644
--- a/tempest/tests/compute/security_groups/test_security_group_rules.py
+++ b/tempest/tests/compute/security_groups/test_security_group_rules.py
@@ -22,7 +22,7 @@
 from tempest.tests.compute import base
 
 
-class SecurityGroupRulesTest(object):
+class SecurityGroupRulesTestBase(object):
 
     @staticmethod
     def setUpClass(cls):
@@ -244,17 +244,8 @@
                       'with nonexistant rule id')
 
 
-class SecurityGroupRulesTestJSON(base.BaseComputeTestJSON,
-                                 SecurityGroupRulesTest):
+class SecurityGroupRulesTest(base.BaseCompTest, SecurityGroupRulesTestBase):
     @classmethod
     def setUpClass(cls):
-        super(SecurityGroupRulesTestJSON, cls).setUpClass()
-        SecurityGroupRulesTest.setUpClass(cls)
-
-
-class SecurityGroupRulesTestXML(base.BaseComputeTestXML,
-                                SecurityGroupRulesTest):
-    @classmethod
-    def setUpClass(cls):
-        super(SecurityGroupRulesTestXML, cls).setUpClass()
-        SecurityGroupRulesTest.setUpClass(cls)
+        super(SecurityGroupRulesTest, cls).setUpClass()
+        SecurityGroupRulesTestBase.setUpClass(cls)
diff --git a/tempest/tests/compute/security_groups/test_security_groups.py b/tempest/tests/compute/security_groups/test_security_groups.py
index 5c0bd82..51bea0d 100644
--- a/tempest/tests/compute/security_groups/test_security_groups.py
+++ b/tempest/tests/compute/security_groups/test_security_groups.py
@@ -22,7 +22,7 @@
 from tempest.tests.compute import base
 
 
-class SecurityGroupsTest(object):
+class SecurityGroupsTestBase(object):
 
     @staticmethod
     def setUpClass(cls):
@@ -298,17 +298,8 @@
         self.assertEqual(202, resp.status)
 
 
-class SecurityGroupsTestJSON(base.BaseComputeTestJSON,
-                             SecurityGroupsTest):
+class SecurityGroupsTest(base.BaseCompTest, SecurityGroupsTestBase):
     @classmethod
     def setUpClass(cls):
-        super(SecurityGroupsTestJSON, cls).setUpClass()
-        SecurityGroupsTest.setUpClass(cls)
-
-
-class SecurityGroupsTestXML(base.BaseComputeTestXML,
-                            SecurityGroupsTest):
-    @classmethod
-    def setUpClass(cls):
-        super(SecurityGroupsTestXML, cls).setUpClass()
-        SecurityGroupsTest.setUpClass(cls)
+        super(SecurityGroupsTest, cls).setUpClass()
+        SecurityGroupsTestBase.setUpClass(cls)
diff --git a/tempest/tests/compute/servers/test_console_output.py b/tempest/tests/compute/servers/test_console_output.py
index 3ad29a1..34ff614 100644
--- a/tempest/tests/compute/servers/test_console_output.py
+++ b/tempest/tests/compute/servers/test_console_output.py
@@ -23,7 +23,7 @@
 from tempest.tests.compute import base
 
 
-class ConsoleOutputTest(object):
+class ConsoleOutputTestBase(object):
 
     @classmethod
     def setUpClass(self, cls):
@@ -87,28 +87,13 @@
 
 
 @attr(type='smoke')
-class ConsoleOutputTestJSON(base.BaseComputeTestJSON,
-                            ConsoleOutputTest):
+class ConsoleOutputTest(base.BaseCompTest, ConsoleOutputTestBase):
     @classmethod
     def setUpClass(cls):
-        super(ConsoleOutputTestJSON, cls).setUpClass()
-        ConsoleOutputTest.setUpClass(cls)
+        super(ConsoleOutputTest, cls).setUpClass()
+        ConsoleOutputTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
-        ConsoleOutputTest.tearDownClass(cls)
-        super(ConsoleOutputTestJSON, cls).tearDownClass()
-
-
-@attr(type='smoke')
-class ConsoleOutputTestXML(base.BaseComputeTestXML,
-                           ConsoleOutputTest):
-    @classmethod
-    def setUpClass(cls):
-        super(ConsoleOutputTestXML, cls).setUpClass()
-        ConsoleOutputTest.setUpClass(cls)
-
-    @classmethod
-    def tearDownClass(cls):
-        ConsoleOutputTest.tearDownClass(cls)
-        super(ConsoleOutputTestXML, cls).tearDownClass()
+        ConsoleOutputTestBase.tearDownClass(cls)
+        super(ConsoleOutputTest, cls).tearDownClass()
diff --git a/tempest/tests/compute/servers/test_create_server.py b/tempest/tests/compute/servers/test_create_server.py
index c5a54dc..c655d18 100644
--- a/tempest/tests/compute/servers/test_create_server.py
+++ b/tempest/tests/compute/servers/test_create_server.py
@@ -29,7 +29,7 @@
 from tempest.tests.compute import base
 
 
-class ServersTest(object):
+class ServersTestBase(object):
 
     run_ssh = tempest.config.TempestConfig().compute.run_ssh
 
@@ -122,8 +122,7 @@
 
 
 @attr(type='positive')
-class ServersTestAutoDisk(base.BaseComputeTestJSON,
-                          ServersTest):
+class ServersTestAutoDisk(base.BaseCompTest, ServersTestBase):
     @classmethod
     def setUpClass(cls):
         if not compute.DISK_CONFIG_ENABLED:
@@ -131,17 +130,16 @@
             raise nose.SkipTest(msg)
         super(ServersTestAutoDisk, cls).setUpClass()
         cls.disk_config = 'AUTO'
-        ServersTest.setUpClass(cls)
+        ServersTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
-        ServersTest.tearDownClass(cls)
+        ServersTestBase.tearDownClass(cls)
         super(ServersTestAutoDisk, cls).tearDownClass()
 
 
 @attr(type='positive')
-class ServersTestManualDisk(base.BaseComputeTestJSON,
-                            ServersTest):
+class ServersTestManualDisk(base.BaseCompTest, ServersTestBase):
     @classmethod
     def setUpClass(cls):
         if not compute.DISK_CONFIG_ENABLED:
@@ -149,39 +147,23 @@
             raise nose.SkipTest(msg)
         super(ServersTestManualDisk, cls).setUpClass()
         cls.disk_config = 'MANUAL'
-        ServersTest.setUpClass(cls)
+        ServersTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
-        ServersTest.tearDownClass(cls)
+        ServersTestBase.tearDownClass(cls)
         super(ServersTestManualDisk, cls).tearDownClass()
 
 
 @attr(type='smoke')
-class ServersTestJSON(base.BaseComputeTestJSON,
-                      ServersTest):
+class ServersTest(base.BaseCompTest, ServersTestBase):
     @classmethod
     def setUpClass(cls):
-        super(ServersTestJSON, cls).setUpClass()
+        super(ServersTest, cls).setUpClass()
         cls.disk_config = None
-        ServersTest.setUpClass(cls)
+        ServersTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
-        ServersTest.tearDownClass(cls)
-        super(ServersTestJSON, cls).tearDownClass()
-
-
-@attr(type='smoke')
-class ServersTestXML(base.BaseComputeTestXML,
-                     ServersTest):
-    @classmethod
-    def setUpClass(cls):
-        super(ServersTestXML, cls).setUpClass()
-        cls.disk_config = None
-        ServersTest.setUpClass(cls)
-
-    @classmethod
-    def tearDownClass(cls):
-        ServersTest.tearDownClass(cls)
-        super(ServersTestXML, cls).tearDownClass()
+        ServersTestBase.tearDownClass(cls)
+        super(ServersTest, cls).tearDownClass()
diff --git a/tempest/tests/compute/servers/test_disk_config.py b/tempest/tests/compute/servers/test_disk_config.py
index 490156b..ff04bbc 100644
--- a/tempest/tests/compute/servers/test_disk_config.py
+++ b/tempest/tests/compute/servers/test_disk_config.py
@@ -22,10 +22,10 @@
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
 from tempest.tests import compute
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class TestServerDiskConfig(BaseComputeTest):
+class TestServerDiskConfig(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/servers/test_list_server_filters.py b/tempest/tests/compute/servers/test_list_server_filters.py
index d943e5d..1f3e48b 100644
--- a/tempest/tests/compute/servers/test_list_server_filters.py
+++ b/tempest/tests/compute/servers/test_list_server_filters.py
@@ -27,7 +27,7 @@
 from tempest.tests import utils
 
 
-class ListServerFiltersTest(object):
+class ListServerFiltersTestBase(object):
 
     @staticmethod
     def setUpClass(cls):
@@ -204,27 +204,13 @@
         return min_detail
 
 
-class ListServerFiltersTestJSON(base.BaseComputeTestJSON,
-                                ListServerFiltersTest):
+class ListServerFiltersTest(base.BaseCompTest, ListServerFiltersTestBase):
     @classmethod
     def setUpClass(cls):
-        super(ListServerFiltersTestJSON, cls).setUpClass()
-        ListServerFiltersTest.setUpClass(cls)
+        super(ListServerFiltersTest, cls).setUpClass()
+        ListServerFiltersTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
-        super(ListServerFiltersTestJSON, cls).tearDownClass()
-        ListServerFiltersTest.tearDownClass(cls)
-
-
-class ListServerFiltersTestXML(base.BaseComputeTestXML,
-                               ListServerFiltersTest):
-    @classmethod
-    def setUpClass(cls):
-        super(ListServerFiltersTestXML, cls).setUpClass()
-        ListServerFiltersTest.setUpClass(cls)
-
-    @classmethod
-    def tearDownClass(cls):
-        super(ListServerFiltersTestXML, cls).tearDownClass()
-        ListServerFiltersTest.tearDownClass(cls)
+        super(ListServerFiltersTest, cls).tearDownClass()
+        ListServerFiltersTestBase.tearDownClass(cls)
diff --git a/tempest/tests/compute/servers/test_list_servers_negative.py b/tempest/tests/compute/servers/test_list_servers_negative.py
index 035ffe8..66441c4 100644
--- a/tempest/tests/compute/servers/test_list_servers_negative.py
+++ b/tempest/tests/compute/servers/test_list_servers_negative.py
@@ -25,10 +25,10 @@
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
 from tempest.tests import compute
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ListServersNegativeTest(BaseComputeTest):
+class ListServersNegativeTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/servers/test_server_actions.py b/tempest/tests/compute/servers/test_server_actions.py
index 2fe8464..a2c5d5c 100644
--- a/tempest/tests/compute/servers/test_server_actions.py
+++ b/tempest/tests/compute/servers/test_server_actions.py
@@ -193,10 +193,9 @@
                       ' be allowed')
 
 
-class ServerActionsTestXML(base.BaseComputeTestXML,
-                           ServerActionsTestBase):
+class ServerActionsTest(base.BaseCompTest, ServerActionsTestBase):
     def setUp(self):
-        super(ServerActionsTestXML, self).setUp()
+        super(ServerActionsTest, self).setUp()
         # Check if the server is in a clean state after test
         try:
             self.client.wait_for_server_status(self.server_id, 'ACTIVE')
@@ -212,7 +211,7 @@
 
     @classmethod
     def setUpClass(cls):
-        super(ServerActionsTestXML, cls).setUpClass()
+        super(ServerActionsTest, cls).setUpClass()
         cls.client = cls.servers_client
         cls.name = rand_name('server')
         resp, server = cls.create_server_with_extras(cls.name,
@@ -225,39 +224,4 @@
     @classmethod
     def tearDownClass(cls):
         cls.clear_servers()
-        super(ServerActionsTestXML, cls).tearDownClass()
-
-
-class ServerActionsTestJSON(base.BaseComputeTestJSON,
-                            ServerActionsTestBase):
-    def setUp(self):
-        super(ServerActionsTestJSON, self).setUp()
-        # Check if the server is in a clean state after test
-        try:
-            self.client.wait_for_server_status(self.server_id, 'ACTIVE')
-        except exceptions:
-            # Rebuild server if something happened to it during a test
-            self.clear_servers()
-            resp, server = self.create_server_with_extras(self.name,
-                                                          self.image_ref,
-                                                          self.flavor_ref)
-            self.server_id = server['id']
-            self.password = server['adminPass']
-            self.client.wait_for_server_status(self.server_id, 'ACTIVE')
-
-    @classmethod
-    def setUpClass(cls):
-        super(ServerActionsTestJSON, cls).setUpClass()
-        cls.client = cls.servers_client
-        cls.name = rand_name('server')
-        resp, server = cls.create_server_with_extras(cls.name,
-                                                     cls.image_ref,
-                                                     cls.flavor_ref)
-        cls.server_id = server['id']
-        cls.password = server['adminPass']
-        cls.client.wait_for_server_status(cls.server_id, 'ACTIVE')
-
-    @classmethod
-    def tearDownClass(cls):
-        cls.clear_servers()
-        super(ServerActionsTestJSON, cls).tearDownClass()
+        super(ServerActionsTest, cls).tearDownClass()
diff --git a/tempest/tests/compute/servers/test_server_addresses.py b/tempest/tests/compute/servers/test_server_addresses.py
index 6e819a2..ee0dbb0 100644
--- a/tempest/tests/compute/servers/test_server_addresses.py
+++ b/tempest/tests/compute/servers/test_server_addresses.py
@@ -19,10 +19,10 @@
 
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ServerAddressesTest(BaseComputeTest):
+class ServerAddressesTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/servers/test_server_metadata.py b/tempest/tests/compute/servers/test_server_metadata.py
index 6c44c3c..b1e82be 100644
--- a/tempest/tests/compute/servers/test_server_metadata.py
+++ b/tempest/tests/compute/servers/test_server_metadata.py
@@ -19,10 +19,10 @@
 
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ServerMetadataTest(BaseComputeTest):
+class ServerMetadataTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/servers/test_server_personality.py b/tempest/tests/compute/servers/test_server_personality.py
index 6ea0959..23222b5 100644
--- a/tempest/tests/compute/servers/test_server_personality.py
+++ b/tempest/tests/compute/servers/test_server_personality.py
@@ -78,21 +78,9 @@
             self.client.delete_server(server['id'])
 
 
-class ServerPersonalityTestXML(base.BaseComputeTestXML,
-                               ServerPersonalityTestBase):
+class ServerPersonalityTest(base.BaseCompTest, ServerPersonalityTestBase):
     @classmethod
     def setUpClass(cls):
-        cls._interface = "xml"
-        super(ServerPersonalityTestXML, cls).setUpClass()
-        cls.client = cls.servers_client
-        cls.user_client = cls.limits_client
-
-
-class ServerPersonalityTestJSON(base.BaseComputeTestJSON,
-                                ServerPersonalityTestBase):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(ServerPersonalityTestJSON, cls).setUpClass()
+        super(ServerPersonalityTest, cls).setUpClass()
         cls.client = cls.servers_client
         cls.user_client = cls.limits_client
diff --git a/tempest/tests/compute/servers/test_servers.py b/tempest/tests/compute/servers/test_servers.py
index 3566ef4..5829835 100644
--- a/tempest/tests/compute/servers/test_servers.py
+++ b/tempest/tests/compute/servers/test_servers.py
@@ -156,10 +156,10 @@
         self.assertEqual('204', resp['status'])
 
 
-class ServersTestJSON(base.BaseComputeTestJSON, ServersTestBase):
+class ServersTest(base.BaseCompTest, ServersTestBase):
     @classmethod
     def setUpClass(cls):
-        super(ServersTestJSON, cls).setUpClass()
+        super(ServersTest, cls).setUpClass()
         cls.client = cls.servers_client
 
     def tearDown(self):
@@ -169,20 +169,4 @@
         # memory
         self.clear_servers()
 
-        super(ServersTestJSON, self).tearDown()
-
-
-class ServersTestXML(base.BaseComputeTestXML, ServersTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(ServersTestXML, cls).setUpClass()
-        cls.client = cls.servers_client
-
-    def tearDown(self):
-        # clean up any remaining servers and wait for them to fully
-        # delete. This is done because delete calls are async, and if
-        # deletes are running slow we could very well overrun system
-        # memory
-        self.clear_servers()
-
-        super(ServersTestXML, self).tearDown()
+        super(ServersTest, self).tearDown()
diff --git a/tempest/tests/compute/servers/test_servers_negative.py b/tempest/tests/compute/servers/test_servers_negative.py
index dfe5944..4ff7f12 100644
--- a/tempest/tests/compute/servers/test_servers_negative.py
+++ b/tempest/tests/compute/servers/test_servers_negative.py
@@ -24,10 +24,10 @@
 from tempest import clients
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class ServersNegativeTest(BaseComputeTest):
+class ServersNegativeTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/test_authorization.py b/tempest/tests/compute/test_authorization.py
index 78661d1..ff38eee 100644
--- a/tempest/tests/compute/test_authorization.py
+++ b/tempest/tests/compute/test_authorization.py
@@ -25,10 +25,10 @@
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
 from tempest.tests import compute
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class AuthorizationTest(BaseComputeTest):
+class AuthorizationTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/test_extensions.py b/tempest/tests/compute/test_extensions.py
index 829e295..dc14138 100644
--- a/tempest/tests/compute/test_extensions.py
+++ b/tempest/tests/compute/test_extensions.py
@@ -30,17 +30,9 @@
         self.assertEqual(200, resp.status)
 
 
-class ExtensionsTestJSON(base.BaseComputeTest, ExtensionsTestBase):
+class ExtensionsTest(base.BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
-        super(ExtensionsTestJSON, cls).setUpClass()
-        cls.client = cls.extensions_client
-
-
-class ExtensionsTestXML(base.BaseComputeTestXML, ExtensionsTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(ExtensionsTestXML, cls).setUpClass()
+        super(ExtensionsTest, cls).setUpClass()
         cls.client = cls.extensions_client
diff --git a/tempest/tests/compute/test_live_block_migration.py b/tempest/tests/compute/test_live_block_migration.py
index 915868c..53f3ac0 100644
--- a/tempest/tests/compute/test_live_block_migration.py
+++ b/tempest/tests/compute/test_live_block_migration.py
@@ -31,7 +31,7 @@
 
 
 @attr(category='live-migration')
-class LiveBlockMigrationTest(base.BaseComputeTest):
+class LiveBlockMigrationTest(base.BaseCompTest):
 
     live_migration_available = (
         config.TempestConfig().compute.live_migration_available)
diff --git a/tempest/tests/compute/test_quotas.py b/tempest/tests/compute/test_quotas.py
index 3dc2515..5d06273 100644
--- a/tempest/tests/compute/test_quotas.py
+++ b/tempest/tests/compute/test_quotas.py
@@ -17,10 +17,10 @@
 
 from nose.plugins.attrib import attr
 
-from tempest.tests.compute.base import BaseComputeTest
+from tempest.tests.compute.base import BaseCompTest
 
 
-class QuotasTest(BaseComputeTest):
+class QuotasTest(BaseCompTest):
 
     @classmethod
     def setUpClass(cls):
diff --git a/tempest/tests/compute/volumes/test_attach_volume.py b/tempest/tests/compute/volumes/test_attach_volume.py
index 9581026..792bedf 100644
--- a/tempest/tests/compute/volumes/test_attach_volume.py
+++ b/tempest/tests/compute/volumes/test_attach_volume.py
@@ -107,17 +107,8 @@
             self._delete(server['id'], volume['id'])
 
 
-class TestAttachVolumeJSON(base.BaseComputeTestJSON,
-                           AttachVolumeTest):
+class TestAttachVolume(base.BaseCompTest, AttachVolumeTest):
     @classmethod
     def setUpClass(cls):
-        super(TestAttachVolumeJSON, cls).setUpClass()
-        AttachVolumeTest.setUpClass(cls)
-
-
-class TestAttachVolumeXML(base.BaseComputeTestXML,
-                          AttachVolumeTest):
-    @classmethod
-    def setUpClass(cls):
-        super(TestAttachVolumeXML, cls).setUpClass()
+        super(TestAttachVolume, cls).setUpClass()
         AttachVolumeTest.setUpClass(cls)
diff --git a/tempest/tests/compute/volumes/test_volumes_get.py b/tempest/tests/compute/volumes/test_volumes_get.py
index afb00cd..45f8053 100644
--- a/tempest/tests/compute/volumes/test_volumes_get.py
+++ b/tempest/tests/compute/volumes/test_volumes_get.py
@@ -28,7 +28,7 @@
         # CREATE, GET, DELETE Volume
         volume = None
         try:
-            v_name = rand_name('Volume-%s-') % self._interface
+            v_name = rand_name('Volume-')
             metadata = {'Type': 'work'}
             #Create volume
             resp, volume = self.client.create_volume(size=1,
@@ -95,17 +95,8 @@
             self.client.wait_for_resource_deletion(volume['id'])
 
 
-class VolumesGetTestXML(base.BaseComputeTestXML, VolumesGetTestBase):
+class VolumesGetTest(base.BaseCompTest, VolumesGetTestBase):
     @classmethod
     def setUpClass(cls):
-        cls._interface = "xml"
-        super(VolumesGetTestXML, cls).setUpClass()
-        cls.client = cls.volumes_extensions_client
-
-
-class VolumesGetTestJSON(base.BaseComputeTestJSON, VolumesGetTestBase):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(VolumesGetTestJSON, cls).setUpClass()
+        super(VolumesGetTest, cls).setUpClass()
         cls.client = cls.volumes_extensions_client
diff --git a/tempest/tests/compute/volumes/test_volumes_list.py b/tempest/tests/compute/volumes/test_volumes_list.py
index fef9c8d..6ec03ae 100644
--- a/tempest/tests/compute/volumes/test_volumes_list.py
+++ b/tempest/tests/compute/volumes/test_volumes_list.py
@@ -62,57 +62,10 @@
                                    for m_vol in missing_volumes))
 
 
-class VolumesTestXML(base.BaseComputeTestXML, VolumesTestBase):
+class VolumesTest(base.BaseCompTest, VolumesTestBase):
     @classmethod
     def setUpClass(cls):
-        cls._interface = 'xml'
-        super(VolumesTestXML, cls).setUpClass()
-        cls.client = cls.volumes_extensions_client
-        # Create 3 Volumes
-        cls.volume_list = list()
-        cls.volume_id_list = list()
-        for i in range(3):
-            v_name = rand_name('volume')
-            metadata = {'Type': 'work'}
-            v_name += cls._interface
-            try:
-                resp, volume = cls.client.create_volume(size=1,
-                                                        display_name=v_name,
-                                                        metadata=metadata)
-                cls.client.wait_for_volume_status(volume['id'], 'available')
-                resp, volume = cls.client.get_volume(volume['id'])
-                cls.volume_list.append(volume)
-                cls.volume_id_list.append(volume['id'])
-            except Exception:
-                if cls.volume_list:
-                    # We could not create all the volumes, though we were able
-                    # to create *some* of the volumes. This is typically
-                    # because the backing file size of the volume group is
-                    # too small. So, here, we clean up whatever we did manage
-                    # to create and raise a SkipTest
-                    for volume in cls.volume_list:
-                        cls.client.delete_volume(volume)
-                    msg = ("Failed to create ALL necessary volumes to run "
-                           "test. This typically means that the backing file "
-                           "size of the nova-volumes group is too small to "
-                           "create the 3 volumes needed by this test case")
-                    raise nose.SkipTest(msg)
-                raise
-
-    @classmethod
-    def tearDownClass(cls):
-        # Delete the created Volumes
-        for volume in cls.volume_list:
-            resp, _ = cls.client.delete_volume(volume['id'])
-            cls.client.wait_for_resource_deletion(volume['id'])
-        super(VolumesTestXML, cls).tearDownClass()
-
-
-class VolumesTestJSON(base.BaseComputeTestJSON, VolumesTestBase):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = 'json'
-        super(VolumesTestJSON, cls).setUpClass()
+        super(VolumesTest, cls).setUpClass()
         cls.client = cls.volumes_extensions_client
         # Create 3 Volumes
         cls.volume_list = []
@@ -120,7 +73,6 @@
         for i in range(3):
             v_name = rand_name('volume-%s')
             metadata = {'Type': 'work'}
-            v_name += cls._interface
             try:
                 resp, volume = cls.client.create_volume(size=1,
                                                         display_name=v_name,
@@ -151,4 +103,4 @@
         for volume in cls.volume_list:
             resp, _ = cls.client.delete_volume(volume['id'])
             cls.client.wait_for_resource_deletion(volume['id'])
-        super(VolumesTestJSON, cls).tearDownClass()
+        super(VolumesTest, cls).tearDownClass()
diff --git a/tempest/tests/compute/volumes/test_volumes_negative.py b/tempest/tests/compute/volumes/test_volumes_negative.py
index d2ad30e..bdd6b2f 100644
--- a/tempest/tests/compute/volumes/test_volumes_negative.py
+++ b/tempest/tests/compute/volumes/test_volumes_negative.py
@@ -124,19 +124,8 @@
         resp, volume = self.client.delete_volume('')
 
 
-class VolumesNegativeTestXML(base.BaseComputeTestXML,
-                             VolumesNegativeTestBase):
+class VolumesNegativeTest(base.BaseCompTest, VolumesNegativeTestBase):
     @classmethod
     def setUpClass(cls):
-        cls._interface = "xml"
-        super(VolumesNegativeTestXML, cls).setUpClass()
-        cls.client = cls.volumes_extensions_client
-
-
-class VolumesNegativeTestJSON(base.BaseComputeTestJSON,
-                              VolumesNegativeTestBase):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(VolumesNegativeTestJSON, cls).setUpClass()
+        super(VolumesNegativeTest, cls).setUpClass()
         cls.client = cls.volumes_extensions_client
diff --git a/tempest/tests/identity/admin/test_roles.py b/tempest/tests/identity/admin/test_roles.py
index f0dd8d9..5ebf2ae 100644
--- a/tempest/tests/identity/admin/test_roles.py
+++ b/tempest/tests/identity/admin/test_roles.py
@@ -100,21 +100,10 @@
         self.client.delete_role(role1_id)
 
 
-class RolesTestJSON(base.BaseIdentityAdminTestJSON,
-                    RolesTestBase):
-
+class RolesTest(base.BaseIdentityAdminTest, RolesTestBase):
     @classmethod
     def setUpClass(cls):
-        super(RolesTestJSON, cls).setUpClass()
-        RolesTestBase.setUpClass(cls)
-
-
-class RolesTestXML(base.BaseIdentityAdminTestXML,
-                   RolesTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(RolesTestXML, cls).setUpClass()
+        super(RolesTest, cls).setUpClass()
         RolesTestBase.setUpClass(cls)
 
 
@@ -264,17 +253,8 @@
                           tenant['id'], 'junk-role-aabbcc11')
 
 
-class UserRolesTestJSON(RolesTestJSON,
-                        UserRolesTestBase):
+class UserRolesTest(RolesTest, UserRolesTestBase):
 
     @classmethod
     def setUpClass(cls):
-        super(UserRolesTestJSON, cls).setUpClass()
-
-
-class UserRolesTestXML(RolesTestXML,
-                       UserRolesTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(UserRolesTestXML, cls).setUpClass()
+        super(UserRolesTest, cls).setUpClass()
diff --git a/tempest/tests/identity/admin/test_services.py b/tempest/tests/identity/admin/test_services.py
index 30dfeb0..7d6cd2a 100644
--- a/tempest/tests/identity/admin/test_services.py
+++ b/tempest/tests/identity/admin/test_services.py
@@ -18,9 +18,12 @@
 import nose
 
 from tempest.common.utils.data_utils import rand_name
+from tempest import config
 from tempest import exceptions
 from tempest.tests.identity import base
 
+CONF = config.TempestConfig()
+
 
 class ServicesTestBase(object):
 
@@ -65,15 +68,9 @@
                               service_data['id'])
 
 
-class ServicesTestJSON(base.BaseIdentityAdminTestJSON, ServicesTestBase):
+class ServicesTest(base.BaseIdentityAdminTest, ServicesTestBase):
     @classmethod
     def setUpClass(cls):
-        super(ServicesTestJSON, cls).setUpClass()
-
-
-class ServicesTestXML(base.BaseIdentityAdminTestXML,
-                      ServicesTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(ServicesTestXML, cls).setUpClass()
-        raise nose.SkipTest("Skipping until Bug #1061738 resolved")
+        super(ServicesTest, cls).setUpClass()
+        if CONF.general.use_xml:
+            raise nose.SkipTest("Skipping until Bug #1061738 resolved")
diff --git a/tempest/tests/identity/admin/test_tenants.py b/tempest/tests/identity/admin/test_tenants.py
index 578af4a..b6678b8 100644
--- a/tempest/tests/identity/admin/test_tenants.py
+++ b/tempest/tests/identity/admin/test_tenants.py
@@ -274,16 +274,8 @@
         self.data.tenants.remove(tenant)
 
 
-class TenantsTestJSON(base.BaseIdentityAdminTestJSON,
-                      TenantsTestBase):
+class TenantsTest(base.BaseIdentityAdminTest, TenantsTestBase):
 
     @classmethod
     def setUpClass(cls):
-        super(TenantsTestJSON, cls).setUpClass()
-
-
-class TenantsTestXML(base.BaseIdentityAdminTestXML, TenantsTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(TenantsTestXML, cls).setUpClass()
+        super(TenantsTest, cls).setUpClass()
diff --git a/tempest/tests/identity/admin/test_users.py b/tempest/tests/identity/admin/test_users.py
index 7ad932b..064f9f8 100644
--- a/tempest/tests/identity/admin/test_users.py
+++ b/tempest/tests/identity/admin/test_users.py
@@ -329,14 +329,7 @@
                       'tenant ids %s' % fail)
 
 
-class UsersTestJSON(base.BaseIdentityAdminTestJSON,
-                    UsersTestBase):
+class UsersTest(base.BaseIdentityAdminTest, UsersTestBase):
     @classmethod
     def setUpClass(cls):
-        super(UsersTestJSON, cls).setUpClass()
-
-
-class UsersTestXML(base.BaseIdentityAdminTestXML, UsersTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(UsersTestXML, cls).setUpClass()
+        super(UsersTest, cls).setUpClass()
diff --git a/tempest/tests/identity/base.py b/tempest/tests/identity/base.py
index 8fee7ef..a75d830 100644
--- a/tempest/tests/identity/base.py
+++ b/tempest/tests/identity/base.py
@@ -26,7 +26,7 @@
 
     @classmethod
     def setUpClass(cls):
-        os = clients.IdentityManager(interface=cls._interface)
+        os = clients.IdentityManager()
         cls.client = os.admin_client
         cls.token_client = os.token_client
 
@@ -35,7 +35,7 @@
 
         cls.data = DataGenerator(cls.client)
 
-        os = clients.IdentityNaManager(interface=cls._interface)
+        os = clients.IdentityNaManager()
         cls.non_admin_client = os.admin_client
 
     @classmethod
@@ -69,20 +69,10 @@
             return role[0]
 
 
-class BaseIdentityAdminTestJSON(BaseIdAdminTest):
+class BaseIdentityAdminTest(BaseIdAdminTest):
     @classmethod
     def setUpClass(cls):
-        cls._interface = "json"
-        super(BaseIdentityAdminTestJSON, cls).setUpClass()
-
-BaseIdentityAdminTest = BaseIdentityAdminTestJSON
-
-
-class BaseIdentityAdminTestXML(BaseIdAdminTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "xml"
-        super(BaseIdentityAdminTestXML, cls).setUpClass()
+        super(BaseIdentityAdminTest, cls).setUpClass()
 
 
 class DataGenerator(object):
diff --git a/tempest/tests/volume/admin/base.py b/tempest/tests/volume/admin/base.py
index d35efbc..38b1e5b 100644
--- a/tempest/tests/volume/admin/base.py
+++ b/tempest/tests/volume/admin/base.py
@@ -42,26 +42,15 @@
                    "in configuration.")
             raise nose.SkipTest(msg)
 
+        if cls.config.general.use_xml:
+            cls.client = volumes_types_xml_client.\
+            VolumeTypesClient(cls.config, cls.adm_user, cls.adm_pass,
+                              cls.auth_url, cls.adm_tenant)
+        else:
+            cls.client = volume_types_json_client.\
+            VolumeTypesClientJSON(cls.config, cls.adm_user, cls.adm_pass,
+                                  cls.auth_url, cls.adm_tenant)
+
     @classmethod
     def tearDownClass(cls):
         super(BaseVolumeAdminTest, cls).tearDownClass()
-
-
-class BaseVolumeAdminTestJSON(BaseVolumeAdminTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(BaseVolumeAdminTestJSON, cls).setUpClass()
-        cls.client = volume_types_json_client.\
-        VolumeTypesClientJSON(cls.config, cls.adm_user, cls.adm_pass,
-                              cls.auth_url, cls.adm_tenant)
-
-
-class BaseVolumeAdminTestXML(BaseVolumeAdminTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "xml"
-        super(BaseVolumeAdminTestXML, cls).setUpClass()
-        cls.client = volume_types_xml_client.\
-        VolumeTypesClientXML(cls.config, cls.adm_user, cls.adm_pass,
-                             cls.auth_url, cls.adm_tenant)
diff --git a/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py b/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py
index d139425..a59f9d3 100644
--- a/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py
+++ b/tempest/tests/volume/admin/test_volume_types_extra_specs_negative.py
@@ -23,8 +23,7 @@
 
 from tempest.common.utils.data_utils import rand_name
 from tempest import exceptions
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestJSON
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestXML
+from tempest.tests.volume.admin.base import BaseVolumeAdminTest
 
 
 class ExtraSpecsNegativeTestBase():
@@ -136,29 +135,14 @@
                                                 str(uuid.uuid4()))
 
 
-class ExtraSpecsNegativeTestXML(BaseVolumeAdminTestXML,
-                                ExtraSpecsNegativeTestBase):
+class ExtraSpecsNegativeTest(BaseVolumeAdminTest, ExtraSpecsNegativeTestBase):
 
     @classmethod
     def setUpClass(cls):
-        super(ExtraSpecsNegativeTestXML, cls).setUpClass()
+        super(ExtraSpecsNegativeTest, cls).setUpClass()
         ExtraSpecsNegativeTestBase.setUpClass(cls)
 
     @classmethod
     def tearDownClass(cls):
-        super(ExtraSpecsNegativeTestXML, cls).tearDownClass()
-        ExtraSpecsNegativeTestBase.tearDownClass(cls)
-
-
-class ExtraSpecsNegativeTestJSON(BaseVolumeAdminTestJSON,
-                                 ExtraSpecsNegativeTestBase):
-
-    @classmethod
-    def setUpClass(cls):
-        super(ExtraSpecsNegativeTestJSON, cls).setUpClass()
-        ExtraSpecsNegativeTestBase.setUpClass(cls)
-
-    @classmethod
-    def tearDownClass(cls):
-        super(ExtraSpecsNegativeTestJSON, cls).tearDownClass()
+        super(ExtraSpecsNegativeTest, cls).tearDownClass()
         ExtraSpecsNegativeTestBase.tearDownClass(cls)
diff --git a/tempest/tests/volume/admin/test_volume_types_negative.py b/tempest/tests/volume/admin/test_volume_types_negative.py
index c2daef9..a7be745 100644
--- a/tempest/tests/volume/admin/test_volume_types_negative.py
+++ b/tempest/tests/volume/admin/test_volume_types_negative.py
@@ -22,8 +22,7 @@
 from nose.tools import raises
 
 from tempest import exceptions
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestJSON
-from tempest.tests.volume.admin.base import BaseVolumeAdminTestXML
+from tempest.tests.volume.admin.base import BaseVolumeAdminTest
 
 
 class VolumeTypesNegativeTestBase():
@@ -60,17 +59,9 @@
         self.client.delete_volume_type(str(uuid.uuid4()))
 
 
-class VolumesTypesNegativeTestXML(BaseVolumeAdminTestXML,
-                                  VolumeTypesNegativeTestBase):
+class VolumesTypesNegativeTest(BaseVolumeAdminTest,
+                               VolumeTypesNegativeTestBase):
     @classmethod
     def setUpClass(cls):
-        super(VolumesTypesNegativeTestXML, cls).setUpClass()
-        VolumeTypesNegativeTestBase.setUpClass(cls)
-
-
-class VolumesTypesNegativeTestJSON(BaseVolumeAdminTestJSON,
-                                   VolumeTypesNegativeTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(VolumesTypesNegativeTestJSON, cls).setUpClass()
+        super(VolumesTypesNegativeTest, cls).setUpClass()
         VolumeTypesNegativeTestBase.setUpClass(cls)
diff --git a/tempest/tests/volume/base.py b/tempest/tests/volume/base.py
index 8657db8..9420d43 100644
--- a/tempest/tests/volume/base.py
+++ b/tempest/tests/volume/base.py
@@ -146,17 +146,3 @@
                 condition()
                 return
             time.sleep(self.build_interval)
-
-
-class BaseVolumeTestJSON(BaseVolumeTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(BaseVolumeTestJSON, cls).setUpClass()
-
-
-class BaseVolumeTestXML(BaseVolumeTest):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "xml"
-        super(BaseVolumeTestXML, cls).setUpClass()
diff --git a/tempest/tests/volume/test_volumes_get.py b/tempest/tests/volume/test_volumes_get.py
index bc64ff4..054f0a9 100644
--- a/tempest/tests/volume/test_volumes_get.py
+++ b/tempest/tests/volume/test_volumes_get.py
@@ -95,17 +95,8 @@
                 self.client.wait_for_resource_deletion(volume['id'])
 
 
-class VolumesGetTestXML(base.BaseVolumeTestXML, VolumesGetTestBase):
+class VolumesGetTest(base.BaseVolumeTest, VolumesGetTestBase):
     @classmethod
     def setUpClass(cls):
-        cls._interface = "xml"
-        super(VolumesGetTestXML, cls).setUpClass()
-        cls.client = cls.volumes_client
-
-
-class VolumesGetTestJSON(base.BaseVolumeTestJSON, VolumesGetTestBase):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = "json"
-        super(VolumesGetTestJSON, cls).setUpClass()
+        super(VolumesGetTest, cls).setUpClass()
         cls.client = cls.volumes_client
diff --git a/tempest/tests/volume/test_volumes_list.py b/tempest/tests/volume/test_volumes_list.py
index 2fc1353..3f0bcee 100644
--- a/tempest/tests/volume/test_volumes_list.py
+++ b/tempest/tests/volume/test_volumes_list.py
@@ -59,11 +59,10 @@
                                    for m_vol in missing_vols))
 
 
-class VolumeListTestXML(base.BaseVolumeTestXML, VolumesListTestBase):
+class VolumeListTest(base.BaseVolumeTest, VolumesListTestBase):
     @classmethod
     def setUpClass(cls):
-        cls._interface = 'xml'
-        super(VolumeListTestXML, cls).setUpClass()
+        super(VolumeListTest, cls).setUpClass()
         cls.client = cls.volumes_client
 
         # Create 3 test volumes
@@ -103,51 +102,4 @@
         for volid in cls.volume_id_list:
             resp, _ = cls.client.delete_volume(volid)
             cls.client.wait_for_resource_deletion(volid)
-        super(VolumeListTestXML, cls).tearDownClass()
-
-
-class VolumeListTestJSON(base.BaseVolumeTestJSON, VolumesListTestBase):
-    @classmethod
-    def setUpClass(cls):
-        cls._interface = 'json'
-        super(VolumeListTestJSON, cls).setUpClass()
-        cls.client = cls.volumes_client
-
-        # Create 3 test volumes
-        cls.volume_list = []
-        cls.volume_id_list = []
-        for i in range(3):
-            v_name = rand_name('volume')
-            metadata = {'Type': 'work'}
-            try:
-                resp, volume = cls.client.create_volume(size=1,
-                                                        display_name=v_name,
-                                                        metadata=metadata)
-                cls.client.wait_for_volume_status(volume['id'], 'available')
-                resp, volume = cls.client.get_volume(volume['id'])
-                cls.volume_list.append(volume)
-                cls.volume_id_list.append(volume['id'])
-            except Exception:
-                if cls.volume_list:
-                    # We could not create all the volumes, though we were able
-                    # to create *some* of the volumes. This is typically
-                    # because the backing file size of the volume group is
-                    # too small. So, here, we clean up whatever we did manage
-                    # to create and raise a SkipTest
-                    for volid in cls.volume_id_list:
-                        cls.client.delete_volume(volid)
-                        cls.client.wait_for_resource_deletion(volid)
-                    msg = ("Failed to create ALL necessary volumes to run "
-                           "test. This typically means that the backing file "
-                           "size of the nova-volumes group is too small to "
-                           "create the 3 volumes needed by this test case")
-                    raise nose.SkipTest(msg)
-                raise
-
-    @classmethod
-    def tearDownClass(cls):
-        # Delete the created volumes
-        for volid in cls.volume_id_list:
-            resp, _ = cls.client.delete_volume(volid)
-            cls.client.wait_for_resource_deletion(volid)
-        super(VolumeListTestJSON, cls).tearDownClass()
+        super(VolumeListTest, cls).tearDownClass()
diff --git a/tempest/tests/volume/test_volumes_negative.py b/tempest/tests/volume/test_volumes_negative.py
index 6bd7002..0474eac 100644
--- a/tempest/tests/volume/test_volumes_negative.py
+++ b/tempest/tests/volume/test_volumes_negative.py
@@ -114,16 +114,8 @@
         resp, volume = self.client.delete_volume('')
 
 
-class VolumesNegativeTestXML(base.BaseVolumeTestXML, VolumesNegativeTestBase):
+class VolumesNegativeTest(base.BaseVolumeTest, VolumesNegativeTestBase):
     @classmethod
     def setUpClass(cls):
-        super(VolumesNegativeTestXML, cls).setUpClass()
-        cls.client = cls.volumes_client
-
-
-class VolumesNegativeTestJSON(base.BaseVolumeTestJSON,
-                              VolumesNegativeTestBase):
-    @classmethod
-    def setUpClass(cls):
-        super(VolumesNegativeTestJSON, cls).setUpClass()
+        super(VolumesNegativeTest, cls).setUpClass()
         cls.client = cls.volumes_client
