diff --git a/tempest/api/identity/admin/test_roles.py b/tempest/api/identity/admin/test_roles.py
index 81bc5de..307e21d 100644
--- a/tempest/api/identity/admin/test_roles.py
+++ b/tempest/api/identity/admin/test_roles.py
@@ -77,6 +77,18 @@
         self.assertFalse(any(found))
 
     @test.attr(type='gate')
+    def test_get_role_by_id(self):
+        # Get a role by its id
+        self.data.setup_test_role()
+        role_id = self.data.role['id']
+        role_name = self.data.role['name']
+        resp, body = self.client.get_role(role_id)
+        self.assertIn('status', resp)
+        self.assertTrue('200', resp['status'])
+        self.assertEqual(role_id, body['id'])
+        self.assertEqual(role_name, body['name'])
+
+    @test.attr(type='gate')
     def test_assign_user_role(self):
         # Assign a role to a user on a tenant
         (user, tenant, role) = self._get_role_params()
diff --git a/tempest/api/identity/admin/test_services.py b/tempest/api/identity/admin/test_services.py
index 459c44c..b0e6cdb 100644
--- a/tempest/api/identity/admin/test_services.py
+++ b/tempest/api/identity/admin/test_services.py
@@ -66,6 +66,20 @@
         self.assertEqual(fetched_service['description'],
                          service_data['description'])
 
+    @attr(type='gate')
+    def test_create_service_without_description(self):
+        # Create a service only with name and type
+        name = data_utils.rand_name('service-')
+        type = data_utils.rand_name('type--')
+        resp, service = self.client.create_service(name, type)
+        self.assertIn('id', service)
+        self.assertTrue('200', resp['status'])
+        self.addCleanup(self._del_service, service['id'])
+        self.assertIn('name', service)
+        self.assertEqual(name, service['name'])
+        self.assertIn('type', service)
+        self.assertEqual(type, service['type'])
+
     @attr(type='smoke')
     def test_list_services(self):
         # Create, List, Verify and Delete Services
diff --git a/tempest/api/orchestration/base.py b/tempest/api/orchestration/base.py
index 9bf9568..ab0fb7c 100644
--- a/tempest/api/orchestration/base.py
+++ b/tempest/api/orchestration/base.py
@@ -10,6 +10,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import os.path
+
 from tempest import clients
 from tempest.common.utils import data_utils
 from tempest import config
@@ -28,18 +30,17 @@
     @classmethod
     def setUpClass(cls):
         super(BaseOrchestrationTest, cls).setUpClass()
-        os = clients.OrchestrationManager()
+        cls.os = clients.OrchestrationManager()
         if not CONF.service_available.heat:
             raise cls.skipException("Heat support is required")
         cls.build_timeout = CONF.orchestration.build_timeout
         cls.build_interval = CONF.orchestration.build_interval
 
-        cls.os = os
-        cls.orchestration_client = os.orchestration_client
-        cls.client = os.orchestration_client
-        cls.servers_client = os.servers_client
-        cls.keypairs_client = os.keypairs_client
-        cls.network_client = os.network_client
+        cls.orchestration_client = cls.os.orchestration_client
+        cls.client = cls.orchestration_client
+        cls.servers_client = cls.os.servers_client
+        cls.keypairs_client = cls.os.keypairs_client
+        cls.network_client = cls.os.network_client
         cls.stacks = []
         cls.keypairs = []
 
@@ -55,8 +56,8 @@
         """
         Returns an instance of the Identity Admin API client
         """
-        os = clients.AdminManager(interface=cls._interface)
-        admin_client = os.identity_client
+        manager = clients.AdminManager(interface=cls._interface)
+        admin_client = manager.identity_client
         return admin_client
 
     @classmethod
@@ -101,6 +102,16 @@
                 pass
 
     @classmethod
+    def load_template(cls, name, ext='yaml'):
+        loc = ["tempest", "api", "orchestration",
+               "stacks", "templates", "%s.%s" % (name, ext)]
+        fullpath = os.path.join(*loc)
+
+        with open(fullpath, "r") as f:
+            content = f.read()
+            return content
+
+    @classmethod
     def tearDownClass(cls):
         cls.clear_stacks()
         cls.clear_keypairs()
diff --git a/tempest/api/orchestration/stacks/templates/cfn_init_signal.yaml b/tempest/api/orchestration/stacks/templates/cfn_init_signal.yaml
new file mode 100644
index 0000000..23ad06f
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/cfn_init_signal.yaml
@@ -0,0 +1,80 @@
+HeatTemplateFormatVersion: '2012-12-12'
+Description: |
+  Template which uses a wait condition to confirm that a minimal
+  cfn-init and cfn-signal has worked
+Parameters:
+  key_name:
+    Type: String
+  flavor:
+    Type: String
+  image:
+    Type: String
+  network:
+    Type: String
+Resources:
+  CfnUser:
+    Type: AWS::IAM::User
+  SmokeSecurityGroup:
+    Type: AWS::EC2::SecurityGroup
+    Properties:
+      GroupDescription: Enable only ping and SSH access
+      SecurityGroupIngress:
+      - {CidrIp: 0.0.0.0/0, FromPort: '-1', IpProtocol: icmp, ToPort: '-1'}
+      - {CidrIp: 0.0.0.0/0, FromPort: '22', IpProtocol: tcp, ToPort: '22'}
+  SmokeKeys:
+    Type: AWS::IAM::AccessKey
+    Properties:
+      UserName: {Ref: CfnUser}
+  SmokeServer:
+    Type: OS::Nova::Server
+    Metadata:
+      AWS::CloudFormation::Init:
+        config:
+          files:
+            /tmp/smoke-status:
+              content: smoke test complete
+            /etc/cfn/cfn-credentials:
+              content:
+                Fn::Replace:
+                - SmokeKeys: {Ref: SmokeKeys}
+                  SecretAccessKey:
+                    'Fn::GetAtt': [SmokeKeys, SecretAccessKey]
+                - |
+                  AWSAccessKeyId=SmokeKeys
+                  AWSSecretKey=SecretAccessKey
+              mode: '000400'
+              owner: root
+              group: root
+    Properties:
+      image: {Ref: image}
+      flavor: {Ref: flavor}
+      key_name: {Ref: key_name}
+      security_groups:
+      - {Ref: SmokeSecurityGroup}
+      networks:
+      - uuid: {Ref: network}
+      user_data:
+        Fn::Replace:
+        - WaitHandle: {Ref: WaitHandle}
+        - |
+          #!/bin/bash -v
+          /opt/aws/bin/cfn-init
+          /opt/aws/bin/cfn-signal -e 0 --data "`cat /tmp/smoke-status`" \
+              "WaitHandle"
+  WaitHandle:
+    Type: AWS::CloudFormation::WaitConditionHandle
+  WaitCondition:
+    Type: AWS::CloudFormation::WaitCondition
+    DependsOn: SmokeServer
+    Properties:
+      Handle: {Ref: WaitHandle}
+      Timeout: '600'
+Outputs:
+  WaitConditionStatus:
+    Description: Contents of /tmp/smoke-status on SmokeServer
+    Value:
+      Fn::GetAtt: [WaitCondition, Data]
+  SmokeServerIp:
+    Description: IP address of server
+    Value:
+      Fn::GetAtt: [SmokeServer, first_address]
diff --git a/tempest/api/orchestration/stacks/templates/neutron_basic.yaml b/tempest/api/orchestration/stacks/templates/neutron_basic.yaml
new file mode 100644
index 0000000..9d90e31
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/neutron_basic.yaml
@@ -0,0 +1,68 @@
+heat_template_version: '2013-05-23'
+description: |
+  Template which creates single EC2 instance
+parameters:
+  KeyName:
+    type: string
+  InstanceType:
+    type: string
+  ImageId:
+    type: string
+  ExternalRouterId:
+    type: string
+  ExternalNetworkId:
+    type: string
+resources:
+  Network:
+    type: OS::Neutron::Net
+    properties:
+      name: NewNetwork
+  Subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: {Ref: Network}
+      name: NewSubnet
+      ip_version: 4
+      cidr: 10.0.3.0/24
+      dns_nameservers: ["8.8.8.8"]
+      allocation_pools:
+      - {end: 10.0.3.150, start: 10.0.3.20}
+  Router:
+    type: OS::Neutron::Router
+    properties:
+      name: NewRouter
+      admin_state_up: false
+      external_gateway_info:
+        network: {get_param: ExternalNetworkId}
+        enable_snat: false
+  RouterInterface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router_id: {get_param: ExternalRouterId}
+      subnet_id: {get_resource: Subnet}
+  Server:
+    type: AWS::EC2::Instance
+    metadata:
+      Name: SmokeServerNeutron
+    properties:
+      ImageId: {get_param: ImageId}
+      InstanceType: {get_param: InstanceType}
+      KeyName: {get_param: KeyName}
+      SubnetId: {get_resource: Subnet}
+      UserData:
+        str_replace:
+          template: |
+            #!/bin/bash -v
+
+            /opt/aws/bin/cfn-signal -e 0 -r "SmokeServerNeutron created" \
+            'wait_handle'
+          params:
+            wait_handle: {get_resource: WaitHandleNeutron}
+  WaitHandleNeutron:
+    type: AWS::CloudFormation::WaitConditionHandle
+  WaitCondition:
+    type: AWS::CloudFormation::WaitCondition
+    depends_on: Server
+    properties:
+      Handle: {get_resource: WaitHandleNeutron}
+      Timeout: '600'
diff --git a/tempest/api/orchestration/stacks/templates/non_empty_stack.yaml b/tempest/api/orchestration/stacks/templates/non_empty_stack.yaml
new file mode 100644
index 0000000..58a934e
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/non_empty_stack.yaml
@@ -0,0 +1,32 @@
+HeatTemplateFormatVersion: '2012-12-12'
+Description: |
+  Template which creates some simple resources
+Parameters:
+  trigger:
+    Type: String
+    Default: not_yet
+Resources:
+  fluffy:
+    Type: AWS::AutoScaling::LaunchConfiguration
+    Metadata:
+      kittens:
+      - Tom
+      - Stinky
+    Properties:
+      ImageId: not_used
+      InstanceType: not_used
+      UserData:
+        Fn::Replace:
+        - variable_a: {Ref: trigger}
+          variable_b: bee
+        - |
+          A == variable_a
+          B == variable_b
+Outputs:
+  fluffy:
+    Description: "fluffies irc nick"
+    Value:
+      Fn::Replace:
+      - nick: {Ref: fluffy}
+      - |
+        #nick
diff --git a/tempest/api/orchestration/stacks/templates/nova_keypair.json b/tempest/api/orchestration/stacks/templates/nova_keypair.json
new file mode 100644
index 0000000..63d3817
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/nova_keypair.json
@@ -0,0 +1,48 @@
+{
+  "AWSTemplateFormatVersion" : "2010-09-09",
+  "Description" : "Template which create two key pairs.",
+  "Parameters" : {
+    "KeyPairName1": {
+      "Type": "String",
+      "Default": "testkey1"
+      },
+    "KeyPairName2": {
+      "Type": "String",
+      "Default": "testkey2"
+      }
+   },
+   "Resources" : {
+     "KeyPairSavePrivate": {
+       "Type": "OS::Nova::KeyPair",
+       "Properties": {
+         "name" : { "Ref" : "KeyPairName1" },
+         "save_private_key": true
+       }
+     },
+     "KeyPairDontSavePrivate": {
+       "Type": "OS::Nova::KeyPair",
+       "Properties": {
+         "name" : { "Ref" : "KeyPairName2" },
+         "save_private_key": false
+      }
+     }
+  },
+ "Outputs": {
+   "KeyPair_PublicKey": {
+     "Description": "Public Key of generated keypair.",
+     "Value": { "Fn::GetAtt" : ["KeyPairSavePrivate", "public_key"] }
+    },
+   "KeyPair_PrivateKey": {
+     "Description": "Private Key of generated keypair.",
+     "Value": { "Fn::GetAtt" : ["KeyPairSavePrivate", "private_key"] }
+   },
+   "KeyPairDontSavePrivate_PublicKey": {
+     "Description": "Public Key of generated keypair.",
+     "Value": { "Fn::GetAtt" : ["KeyPairDontSavePrivate", "public_key"] }
+   },
+  "KeyPairDontSavePrivate_PrivateKey": {
+     "Description": "Private Key of generated keypair.",
+     "Value": { "Fn::GetAtt" : ["KeyPairDontSavePrivate", "private_key"] }
+   }
+  }
+}
diff --git a/tempest/api/orchestration/stacks/templates/nova_keypair.yaml b/tempest/api/orchestration/stacks/templates/nova_keypair.yaml
new file mode 100644
index 0000000..81ad99c
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/nova_keypair.yaml
@@ -0,0 +1,43 @@
+heat_template_version: 2013-05-23
+
+description: >
+  Template which creates two key pairs.
+
+parameters:
+  KeyPairName1:
+    type: string
+    default: testkey
+
+  KeyPairName2:
+    type: string
+    default: testkey2
+
+resources:
+  KeyPairSavePrivate:
+    type: OS::Nova::KeyPair
+    properties:
+      name: { get_param: KeyPairName1 }
+      save_private_key: true
+
+  KeyPairDontSavePrivate:
+    type: OS::Nova::KeyPair
+    properties:
+      name: { get_param: KeyPairName2 }
+      save_private_key: false
+
+outputs:
+  KeyPair_PublicKey:
+    description: Public Key of generated keypair
+    value: { get_attr: [KeyPairSavePrivate, public_key] }
+
+  KeyPair_PrivateKey:
+    description: Private Key of generated keypair
+    value: { get_attr: [KeyPairSavePrivate, private_key] }
+
+  KeyPairDontSavePrivate_PublicKey:
+    description: Public Key of generated keypair
+    value: { get_attr: [KeyPairDontSavePrivate, public_key] }
+
+  KeyPairDontSavePrivate_PrivateKey:
+    description: Private Key of generated keypair
+    value: { get_attr: [KeyPairDontSavePrivate, private_key] }
diff --git a/tempest/api/orchestration/stacks/templates/swift_basic.yaml b/tempest/api/orchestration/stacks/templates/swift_basic.yaml
new file mode 100644
index 0000000..713f8bc
--- /dev/null
+++ b/tempest/api/orchestration/stacks/templates/swift_basic.yaml
@@ -0,0 +1,23 @@
+heat_template_version: 2013-05-23
+description: Template which creates a Swift container resource
+
+resources:
+  SwiftContainerWebsite:
+    deletion_policy: "Delete"
+    type: OS::Swift::Container
+    properties:
+      X-Container-Read: ".r:*"
+      X-Container-Meta:
+        web-index: "index.html"
+        web-error: "error.html"
+
+  SwiftContainer:
+    type: OS::Swift::Container
+
+outputs:
+  WebsiteURL:
+    description: "URL for website hosted on S3"
+    value: { get_attr: [SwiftContainer, WebsiteURL] }
+  DomainName:
+    description: "Domain of Swift host"
+    value: { get_attr: [SwiftContainer, DomainName] }
diff --git a/tempest/api/orchestration/stacks/test_neutron_resources.py b/tempest/api/orchestration/stacks/test_neutron_resources.py
index dee26b1..61dbb4d 100644
--- a/tempest/api/orchestration/stacks/test_neutron_resources.py
+++ b/tempest/api/orchestration/stacks/test_neutron_resources.py
@@ -26,78 +26,6 @@
 
 
 class NeutronResourcesTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
-
-    template = """
-heat_template_version: '2013-05-23'
-description: |
-  Template which creates single EC2 instance
-parameters:
-  KeyName:
-    type: string
-  InstanceType:
-    type: string
-  ImageId:
-    type: string
-  ExternalRouterId:
-    type: string
-  ExternalNetworkId:
-    type: string
-resources:
-  Network:
-    type: OS::Neutron::Net
-    properties:
-      name: NewNetwork
-  Subnet:
-    type: OS::Neutron::Subnet
-    properties:
-      network_id: {Ref: Network}
-      name: NewSubnet
-      ip_version: 4
-      cidr: 10.0.3.0/24
-      dns_nameservers: ["8.8.8.8"]
-      allocation_pools:
-      - {end: 10.0.3.150, start: 10.0.3.20}
-  Router:
-    type: OS::Neutron::Router
-    properties:
-      name: NewRouter
-      admin_state_up: false
-      external_gateway_info:
-        network: {get_param: ExternalNetworkId}
-        enable_snat: false
-  RouterInterface:
-    type: OS::Neutron::RouterInterface
-    properties:
-      router_id: {get_param: ExternalRouterId}
-      subnet_id: {get_resource: Subnet}
-  Server:
-    type: AWS::EC2::Instance
-    metadata:
-      Name: SmokeServerNeutron
-    properties:
-      ImageId: {get_param: ImageId}
-      InstanceType: {get_param: InstanceType}
-      KeyName: {get_param: KeyName}
-      SubnetId: {get_resource: Subnet}
-      UserData:
-        str_replace:
-          template: |
-            #!/bin/bash -v
-
-            /opt/aws/bin/cfn-signal -e 0 -r "SmokeServerNeutron created" \
-            'wait_handle'
-          params:
-            wait_handle: {get_resource: WaitHandleNeutron}
-  WaitHandleNeutron:
-    type: AWS::CloudFormation::WaitConditionHandle
-  WaitCondition:
-    type: AWS::CloudFormation::WaitCondition
-    depends_on: Server
-    properties:
-      Handle: {get_resource: WaitHandleNeutron}
-      Timeout: '600'
-"""
 
     @classmethod
     @test.safe_setup
@@ -111,6 +39,7 @@
             raise cls.skipException("Neutron support is required")
         cls.network_client = os.network_client
         cls.stack_name = data_utils.rand_name('heat')
+        template = cls.load_template('neutron_basic')
         cls.keypair_name = (CONF.orchestration.keypair_name or
                             cls._create_keypair()['name'])
         cls.external_router_id = cls._get_external_router_id()
@@ -119,7 +48,7 @@
         # create the stack
         cls.stack_identifier = cls.create_stack(
             cls.stack_name,
-            cls.template,
+            template,
             parameters={
                 'KeyName': cls.keypair_name,
                 'InstanceType': CONF.orchestration.instance_type,
diff --git a/tempest/api/orchestration/stacks/test_non_empty_stack.py b/tempest/api/orchestration/stacks/test_non_empty_stack.py
index 11d01f7..70bf562 100644
--- a/tempest/api/orchestration/stacks/test_non_empty_stack.py
+++ b/tempest/api/orchestration/stacks/test_non_empty_stack.py
@@ -21,53 +21,18 @@
 
 
 class StacksTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
-
-    template = """
-HeatTemplateFormatVersion: '2012-12-12'
-Description: |
-  Template which creates some simple resources
-Parameters:
-  trigger:
-    Type: String
-    Default: not_yet
-Resources:
-  fluffy:
-    Type: AWS::AutoScaling::LaunchConfiguration
-    Metadata:
-      kittens:
-      - Tom
-      - Stinky
-    Properties:
-      ImageId: not_used
-      InstanceType: not_used
-      UserData:
-        Fn::Replace:
-        - variable_a: {Ref: trigger}
-          variable_b: bee
-        - |
-          A == variable_a
-          B == variable_b
-Outputs:
-  fluffy:
-    Description: "fluffies irc nick"
-    Value:
-      Fn::Replace:
-      - nick: {Ref: fluffy}
-      - |
-        #nick
-"""
 
     @classmethod
     def setUpClass(cls):
         super(StacksTestJSON, cls).setUpClass()
         cls.client = cls.orchestration_client
         cls.stack_name = data_utils.rand_name('heat')
+        template = cls.load_template('non_empty_stack')
 
         # create the stack
         cls.stack_identifier = cls.create_stack(
             cls.stack_name,
-            cls.template,
+            template,
             parameters={
                 'trigger': 'start'
             })
diff --git a/tempest/api/orchestration/stacks/test_nova_keypair_resources.py b/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
index 9d3bf13..1edae72 100644
--- a/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
+++ b/tempest/api/orchestration/stacks/test_nova_keypair_resources.py
@@ -22,63 +22,19 @@
 
 
 class NovaKeyPairResourcesYAMLTest(base.BaseOrchestrationTest):
-    _interface = 'json'
-    template = """
-heat_template_version: 2013-05-23
-
-description: >
-  Template which creates two key pairs.
-
-parameters:
-  KeyPairName1:
-    type: string
-    default: testkey
-
-  KeyPairName2:
-    type: string
-    default: testkey2
-
-resources:
-  KeyPairSavePrivate:
-    type: OS::Nova::KeyPair
-    properties:
-      name: { get_param: KeyPairName1 }
-      save_private_key: true
-
-  KeyPairDontSavePrivate:
-    type: OS::Nova::KeyPair
-    properties:
-      name: { get_param: KeyPairName2 }
-      save_private_key: false
-
-outputs:
-  KeyPair_PublicKey:
-    description: Public Key of generated keypair
-    value: { get_attr: [KeyPairSavePrivate, public_key] }
-
-  KeyPair_PrivateKey:
-    description: Private Key of generated keypair
-    value: { get_attr: [KeyPairSavePrivate, private_key] }
-
-  KeyPairDontSavePrivate_PublicKey:
-    description: Public Key of generated keypair
-    value: { get_attr: [KeyPairDontSavePrivate, public_key] }
-
-  KeyPairDontSavePrivate_PrivateKey:
-    description: Private Key of generated keypair
-    value: { get_attr: [KeyPairDontSavePrivate, private_key] }
-"""
+    _tpl_type = 'yaml'
 
     @classmethod
     def setUpClass(cls):
         super(NovaKeyPairResourcesYAMLTest, cls).setUpClass()
         cls.client = cls.orchestration_client
         cls.stack_name = data_utils.rand_name('heat')
+        template = cls.load_template('nova_keypair', ext=cls._tpl_type)
 
         # create the stack, avoid any duplicated key.
         cls.stack_identifier = cls.create_stack(
             cls.stack_name,
-            cls.template,
+            template,
             parameters={
                 'KeyPairName1': cls.stack_name + '_1',
                 'KeyPairName2': cls.stack_name + '_2'
@@ -129,53 +85,4 @@
 
 
 class NovaKeyPairResourcesAWSTest(NovaKeyPairResourcesYAMLTest):
-    template = """
-{
-  "AWSTemplateFormatVersion" : "2010-09-09",
-  "Description" : "Template which create two key pairs.",
-  "Parameters" : {
-    "KeyPairName1": {
-      "Type": "String",
-      "Default": "testkey1"
-      },
-    "KeyPairName2": {
-      "Type": "String",
-      "Default": "testkey2"
-      }
-   },
-   "Resources" : {
-     "KeyPairSavePrivate": {
-       "Type": "OS::Nova::KeyPair",
-       "Properties": {
-         "name" : { "Ref" : "KeyPairName1" },
-         "save_private_key": true
-       }
-     },
-     "KeyPairDontSavePrivate": {
-       "Type": "OS::Nova::KeyPair",
-       "Properties": {
-         "name" : { "Ref" : "KeyPairName2" },
-         "save_private_key": false
-      }
-     }
-  },
- "Outputs": {
-   "KeyPair_PublicKey": {
-     "Description": "Public Key of generated keypair.",
-     "Value": { "Fn::GetAtt" : ["KeyPairSavePrivate", "public_key"] }
-    },
-   "KeyPair_PrivateKey": {
-     "Description": "Private Key of generated keypair.",
-     "Value": { "Fn::GetAtt" : ["KeyPairSavePrivate", "private_key"] }
-   },
-   "KeyPairDontSavePrivate_PublicKey": {
-     "Description": "Public Key of generated keypair.",
-     "Value": { "Fn::GetAtt" : ["KeyPairDontSavePrivate", "public_key"] }
-   },
-  "KeyPairDontSavePrivate_PrivateKey": {
-     "Description": "Private Key of generated keypair.",
-     "Value": { "Fn::GetAtt" : ["KeyPairDontSavePrivate", "private_key"] }
-   }
-  }
-}
-"""
+    _tpl_type = 'json'
diff --git a/tempest/api/orchestration/stacks/test_server_cfn_init.py b/tempest/api/orchestration/stacks/test_server_cfn_init.py
index a6f74b6..b590f88 100644
--- a/tempest/api/orchestration/stacks/test_server_cfn_init.py
+++ b/tempest/api/orchestration/stacks/test_server_cfn_init.py
@@ -26,92 +26,8 @@
 
 
 class ServerCfnInitTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
     existing_keypair = CONF.orchestration.keypair_name is not None
 
-    template = """
-HeatTemplateFormatVersion: '2012-12-12'
-Description: |
-  Template which uses a wait condition to confirm that a minimal
-  cfn-init and cfn-signal has worked
-Parameters:
-  key_name:
-    Type: String
-  flavor:
-    Type: String
-  image:
-    Type: String
-  network:
-    Type: String
-Resources:
-  CfnUser:
-    Type: AWS::IAM::User
-  SmokeSecurityGroup:
-    Type: AWS::EC2::SecurityGroup
-    Properties:
-      GroupDescription: Enable only ping and SSH access
-      SecurityGroupIngress:
-      - {CidrIp: 0.0.0.0/0, FromPort: '-1', IpProtocol: icmp, ToPort: '-1'}
-      - {CidrIp: 0.0.0.0/0, FromPort: '22', IpProtocol: tcp, ToPort: '22'}
-  SmokeKeys:
-    Type: AWS::IAM::AccessKey
-    Properties:
-      UserName: {Ref: CfnUser}
-  SmokeServer:
-    Type: OS::Nova::Server
-    Metadata:
-      AWS::CloudFormation::Init:
-        config:
-          files:
-            /tmp/smoke-status:
-              content: smoke test complete
-            /etc/cfn/cfn-credentials:
-              content:
-                Fn::Replace:
-                - SmokeKeys: {Ref: SmokeKeys}
-                  SecretAccessKey:
-                    'Fn::GetAtt': [SmokeKeys, SecretAccessKey]
-                - |
-                  AWSAccessKeyId=SmokeKeys
-                  AWSSecretKey=SecretAccessKey
-              mode: '000400'
-              owner: root
-              group: root
-    Properties:
-      image: {Ref: image}
-      flavor: {Ref: flavor}
-      key_name: {Ref: key_name}
-      security_groups:
-      - {Ref: SmokeSecurityGroup}
-      networks:
-      - uuid: {Ref: network}
-      user_data:
-        Fn::Replace:
-        - WaitHandle: {Ref: WaitHandle}
-        - |
-          #!/bin/bash -v
-          /opt/aws/bin/cfn-init
-          /opt/aws/bin/cfn-signal -e 0 --data "`cat /tmp/smoke-status`" \
-              "WaitHandle"
-  WaitHandle:
-    Type: AWS::CloudFormation::WaitConditionHandle
-  WaitCondition:
-    Type: AWS::CloudFormation::WaitCondition
-    DependsOn: SmokeServer
-    Properties:
-      Handle: {Ref: WaitHandle}
-      Timeout: '600'
-Outputs:
-  WaitConditionStatus:
-    Description: Contents of /tmp/smoke-status on SmokeServer
-    Value:
-      Fn::GetAtt: [WaitCondition, Data]
-  SmokeServerIp:
-    Description: IP address of server
-    Value:
-      Fn::GetAtt: [SmokeServer, first_address]
-"""
-
     @classmethod
     @test.safe_setup
     def setUpClass(cls):
@@ -119,7 +35,7 @@
         if not CONF.orchestration.image_ref:
             raise cls.skipException("No image available to test")
         cls.client = cls.orchestration_client
-
+        template = cls.load_template('cfn_init_signal')
         stack_name = data_utils.rand_name('heat')
         if CONF.orchestration.keypair_name:
             keypair_name = CONF.orchestration.keypair_name
@@ -130,7 +46,7 @@
         # create the stack
         cls.stack_identifier = cls.create_stack(
             stack_name,
-            cls.template,
+            template,
             parameters={
                 'key_name': keypair_name,
                 'flavor': CONF.orchestration.instance_type,
diff --git a/tempest/api/orchestration/stacks/test_stacks.py b/tempest/api/orchestration/stacks/test_stacks.py
index fc2dda8..3ffa0bc 100644
--- a/tempest/api/orchestration/stacks/test_stacks.py
+++ b/tempest/api/orchestration/stacks/test_stacks.py
@@ -20,8 +20,6 @@
 
 
 class StacksTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
-
     empty_template = "HeatTemplateFormatVersion: '2012-12-12'\n"
 
     @classmethod
diff --git a/tempest/api/orchestration/stacks/test_swift_resources.py b/tempest/api/orchestration/stacks/test_swift_resources.py
index fcf357a..b954128 100644
--- a/tempest/api/orchestration/stacks/test_swift_resources.py
+++ b/tempest/api/orchestration/stacks/test_swift_resources.py
@@ -25,40 +25,13 @@
 
 
 class SwiftResourcesTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
-    template = """
-heat_template_version: 2013-05-23
-description: Template which creates a Swift container resource
-
-resources:
-  SwiftContainerWebsite:
-    deletion_policy: "Delete"
-    type: OS::Swift::Container
-    properties:
-      X-Container-Read: ".r:*"
-      X-Container-Meta:
-        web-index: "index.html"
-        web-error: "error.html"
-
-  SwiftContainer:
-    type: OS::Swift::Container
-
-outputs:
-  WebsiteURL:
-    description: "URL for website hosted on S3"
-    value: { get_attr: [SwiftContainer, WebsiteURL] }
-  DomainName:
-    description: "Domain of Swift host"
-    value: { get_attr: [SwiftContainer, DomainName] }
-
-"""
-
     @classmethod
     @test.safe_setup
     def setUpClass(cls):
         super(SwiftResourcesTestJSON, cls).setUpClass()
         cls.client = cls.orchestration_client
         cls.stack_name = data_utils.rand_name('heat')
+        template = cls.load_template('swift_basic')
         os = clients.Manager()
         if not CONF.service_available.swift:
             raise cls.skipException("Swift support is required")
@@ -67,7 +40,7 @@
         # create the stack
         cls.stack_identifier = cls.create_stack(
             cls.stack_name,
-            cls.template)
+            template)
         cls.stack_id = cls.stack_identifier.split('/')[1]
         cls.client.wait_for_stack_status(cls.stack_id, 'CREATE_COMPLETE')
         cls.test_resources = {}
diff --git a/tempest/api/orchestration/stacks/test_templates.py b/tempest/api/orchestration/stacks/test_templates.py
index 2dc29fc..5f55b4d 100644
--- a/tempest/api/orchestration/stacks/test_templates.py
+++ b/tempest/api/orchestration/stacks/test_templates.py
@@ -16,8 +16,6 @@
 
 
 class TemplateYAMLTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
-
     template = """
 HeatTemplateFormatVersion: '2012-12-12'
 Description: |
diff --git a/tempest/api/orchestration/stacks/test_templates_negative.py b/tempest/api/orchestration/stacks/test_templates_negative.py
index c55f6ee..a2a6f98 100644
--- a/tempest/api/orchestration/stacks/test_templates_negative.py
+++ b/tempest/api/orchestration/stacks/test_templates_negative.py
@@ -18,8 +18,6 @@
 
 
 class TemplateYAMLNegativeTestJSON(base.BaseOrchestrationTest):
-    _interface = 'json'
-
     template = """
 HeatTemplateFormatVersion: '2012-12-12'
 Description: |
diff --git a/tempest/api_schema/compute/hypervisors.py b/tempest/api_schema/compute/hypervisors.py
new file mode 100644
index 0000000..3c24a38
--- /dev/null
+++ b/tempest/api_schema/compute/hypervisors.py
@@ -0,0 +1,99 @@
+# Copyright 2014 NEC Corporation.  All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+hypervisor_statistics = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'hypervisor_statistics': {
+                'type': 'object',
+                'properties': {
+                    'count': {'type': 'integer'},
+                    'current_workload': {'type': 'integer'},
+                    'disk_available_least': {'type': 'integer'},
+                    'free_disk_gb': {'type': 'integer'},
+                    'free_ram_mb': {'type': 'integer'},
+                    'local_gb': {'type': 'integer'},
+                    'local_gb_used': {'type': 'integer'},
+                    'memory_mb': {'type': 'integer'},
+                    'memory_mb_used': {'type': 'integer'},
+                    'running_vms': {'type': 'integer'},
+                    'vcpus': {'type': 'integer'},
+                    'vcpus_used': {'type': 'integer'}
+                },
+                'required': ['count', 'current_workload',
+                             'disk_available_least', 'free_disk_gb',
+                             'free_ram_mb', 'local_gb', 'local_gb_used',
+                             'memory_mb', 'memory_mb_used', 'running_vms',
+                             'vcpus', 'vcpus_used']
+            }
+        },
+        'required': ['hypervisor_statistics']
+    }
+}
+
+common_list_hypervisors_detail = {
+    'status_code': [200],
+    'response_body': {
+        'type': 'object',
+        'properties': {
+            'hypervisors': {
+                'type': 'array',
+                'items': {
+                    'type': 'object',
+                    'properties': {
+                        'cpu_info': {'type': 'string'},
+                        'current_workload': {'type': 'integer'},
+                        'disk_available_least': {'type': ['integer', 'null']},
+                        'host_ip': {
+                            'type': 'string',
+                            'format': 'ip-address'
+                        },
+                        'free_disk_gb': {'type': 'integer'},
+                        'free_ram_mb': {'type': 'integer'},
+                        'hypervisor_hostname': {'type': 'string'},
+                        'hypervisor_type': {'type': 'string'},
+                        'hypervisor_version': {'type': 'integer'},
+                        'id': {'type': ['integer', 'string']},
+                        'local_gb': {'type': 'integer'},
+                        'local_gb_used': {'type': 'integer'},
+                        'memory_mb': {'type': 'integer'},
+                        'memory_mb_used': {'type': 'integer'},
+                        'running_vms': {'type': 'integer'},
+                        'service': {
+                            'type': 'object',
+                            'properties': {
+                                'host': {'type': 'string'},
+                                'id': {'type': ['integer', 'string']}
+                            },
+                            'required': ['host', 'id']
+                        },
+                        'vcpus': {'type': 'integer'},
+                        'vcpus_used': {'type': 'integer'}
+                    },
+                    'required': ['cpu_info', 'current_workload',
+                                 'disk_available_least', 'host_ip',
+                                 'free_disk_gb', 'free_ram_mb',
+                                 'hypervisor_hostname', 'hypervisor_type',
+                                 'hypervisor_version', 'id', 'local_gb',
+                                 'local_gb_used', 'memory_mb',
+                                 'memory_mb_used', 'running_vms', 'service',
+                                 'vcpus', 'vcpus_used']
+                }
+            }
+        },
+        'required': ['hypervisors']
+    }
+}
diff --git a/tempest/api_schema/compute/v3/hypervisors.py b/tempest/api_schema/compute/v3/hypervisors.py
new file mode 100644
index 0000000..0a6ec76
--- /dev/null
+++ b/tempest/api_schema/compute/v3/hypervisors.py
@@ -0,0 +1,22 @@
+# Copyright 2014 NEC Corporation.  All rights reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import copy
+from tempest.api_schema.compute import hypervisors
+
+list_hypervisors_detail = copy.deepcopy(
+    hypervisors.common_list_hypervisors_detail)
+# Defining extra attributes for V3 show hypervisor schema
+list_hypervisors_detail['response_body']['properties']['hypervisors'][
+    'items']['properties']['os-pci:pci_stats'] = {'type': 'array'}
diff --git a/tempest/common/rest_client.py b/tempest/common/rest_client.py
index 934b861..5d7779e 100644
--- a/tempest/common/rest_client.py
+++ b/tempest/common/rest_client.py
@@ -24,10 +24,10 @@
 import jsonschema
 
 from tempest.common import http
+from tempest.common import xml_utils as common
 from tempest import config
 from tempest import exceptions
 from tempest.openstack.common import log as logging
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/compute/xml/common.py b/tempest/common/xml_utils.py
similarity index 100%
rename from tempest/services/compute/xml/common.py
rename to tempest/common/xml_utils.py
diff --git a/tempest/services/compute/json/hypervisor_client.py b/tempest/services/compute/json/hypervisor_client.py
index c6b13b0..3fcc879 100644
--- a/tempest/services/compute/json/hypervisor_client.py
+++ b/tempest/services/compute/json/hypervisor_client.py
@@ -15,6 +15,7 @@
 
 import json
 
+from tempest.api_schema.compute import hypervisors as common_schema
 from tempest.common import rest_client
 from tempest import config
 
@@ -37,6 +38,8 @@
         """Show detailed hypervisors information."""
         resp, body = self.get('os-hypervisors/detail')
         body = json.loads(body)
+        self.validate_response(common_schema.common_list_hypervisors_detail,
+                               resp, body)
         return resp, body['hypervisors']
 
     def get_hypervisor_show_details(self, hyper_id):
@@ -55,6 +58,7 @@
         """Get hypervisor statistics over all compute nodes."""
         resp, body = self.get('os-hypervisors/statistics')
         body = json.loads(body)
+        self.validate_response(common_schema.hypervisor_statistics, resp, body)
         return resp, body['hypervisor_statistics']
 
     def get_hypervisor_uptime(self, hyper_id):
diff --git a/tempest/services/compute/v3/json/hypervisor_client.py b/tempest/services/compute/v3/json/hypervisor_client.py
index 30e391f..c02f75c 100644
--- a/tempest/services/compute/v3/json/hypervisor_client.py
+++ b/tempest/services/compute/v3/json/hypervisor_client.py
@@ -15,6 +15,8 @@
 
 import json
 
+from tempest.api_schema.compute import hypervisors as common_schema
+from tempest.api_schema.compute.v3 import hypervisors as v3schema
 from tempest.common import rest_client
 from tempest import config
 
@@ -37,6 +39,7 @@
         """Show detailed hypervisors information."""
         resp, body = self.get('os-hypervisors/detail')
         body = json.loads(body)
+        self.validate_response(v3schema.list_hypervisors_detail, resp, body)
         return resp, body['hypervisors']
 
     def get_hypervisor_show_details(self, hyper_id):
@@ -55,6 +58,7 @@
         """Get hypervisor statistics over all compute nodes."""
         resp, body = self.get('os-hypervisors/statistics')
         body = json.loads(body)
+        self.validate_response(common_schema.hypervisor_statistics, resp, body)
         return resp, body['hypervisor_statistics']
 
     def get_hypervisor_uptime(self, hyper_id):
diff --git a/tempest/services/compute/xml/aggregates_client.py b/tempest/services/compute/xml/aggregates_client.py
index 5b250ee..b5f7678 100644
--- a/tempest/services/compute/xml/aggregates_client.py
+++ b/tempest/services/compute/xml/aggregates_client.py
@@ -16,12 +16,9 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -34,7 +31,7 @@
         self.service = CONF.compute.catalog_type
 
     def _format_aggregate(self, g):
-        agg = xml_to_json(g)
+        agg = xml_utils.xml_to_json(g)
         aggregate = {}
         for key, value in agg.items():
             if key == 'hosts':
@@ -64,21 +61,21 @@
 
     def create_aggregate(self, name, availability_zone=None):
         """Creates a new aggregate."""
-        post_body = Element("aggregate",
-                            name=name,
-                            availability_zone=availability_zone)
+        post_body = xml_utils.Element("aggregate",
+                                      name=name,
+                                      availability_zone=availability_zone)
         resp, body = self.post('os-aggregates',
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         aggregate = self._format_aggregate(etree.fromstring(body))
         return resp, aggregate
 
     def update_aggregate(self, aggregate_id, name, availability_zone=None):
         """Update a aggregate."""
-        put_body = Element("aggregate",
-                           name=name,
-                           availability_zone=availability_zone)
+        put_body = xml_utils.Element("aggregate",
+                                     name=name,
+                                     availability_zone=availability_zone)
         resp, body = self.put('os-aggregates/%s' % str(aggregate_id),
-                              str(Document(put_body)))
+                              str(xml_utils.Document(put_body)))
         aggregate = self._format_aggregate(etree.fromstring(body))
         return resp, aggregate
 
@@ -95,30 +92,30 @@
 
     def add_host(self, aggregate_id, host):
         """Adds a host to the given aggregate."""
-        post_body = Element("add_host", host=host)
+        post_body = xml_utils.Element("add_host", host=host)
         resp, body = self.post('os-aggregates/%s/action' % aggregate_id,
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         aggregate = self._format_aggregate(etree.fromstring(body))
         return resp, aggregate
 
     def remove_host(self, aggregate_id, host):
         """Removes a host from the given aggregate."""
-        post_body = Element("remove_host", host=host)
+        post_body = xml_utils.Element("remove_host", host=host)
         resp, body = self.post('os-aggregates/%s/action' % aggregate_id,
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         aggregate = self._format_aggregate(etree.fromstring(body))
         return resp, aggregate
 
     def set_metadata(self, aggregate_id, meta):
         """Replaces the aggregate's existing metadata with new metadata."""
-        post_body = Element("set_metadata")
-        metadata = Element("metadata")
+        post_body = xml_utils.Element("set_metadata")
+        metadata = xml_utils.Element("metadata")
         post_body.append(metadata)
         for k, v in meta.items():
-            meta = Element(k)
-            meta.append(Text(v))
+            meta = xml_utils.Element(k)
+            meta.append(xml_utils.Text(v))
             metadata.append(meta)
         resp, body = self.post('os-aggregates/%s/action' % aggregate_id,
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         aggregate = self._format_aggregate(etree.fromstring(body))
         return resp, aggregate
diff --git a/tempest/services/compute/xml/availability_zone_client.py b/tempest/services/compute/xml/availability_zone_client.py
index 4d71186..38446b8 100644
--- a/tempest/services/compute/xml/availability_zone_client.py
+++ b/tempest/services/compute/xml/availability_zone_client.py
@@ -16,8 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -31,7 +31,7 @@
         self.service = CONF.compute.catalog_type
 
     def _parse_array(self, node):
-        return [xml_to_json(x) for x in node]
+        return [xml_utils.xml_to_json(x) for x in node]
 
     def get_availability_zone_list(self):
         resp, body = self.get('os-availability-zone')
diff --git a/tempest/services/compute/xml/extensions_client.py b/tempest/services/compute/xml/extensions_client.py
index 3e8254c..d924dff 100644
--- a/tempest/services/compute/xml/extensions_client.py
+++ b/tempest/services/compute/xml/extensions_client.py
@@ -16,8 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -32,7 +32,7 @@
     def _parse_array(self, node):
         array = []
         for child in node:
-            array.append(xml_to_json(child))
+            array.append(xml_utils.xml_to_json(child))
         return array
 
     def list_extensions(self):
@@ -48,5 +48,5 @@
 
     def get_extension(self, extension_alias):
         resp, body = self.get('extensions/%s' % extension_alias)
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
diff --git a/tempest/services/compute/xml/fixed_ips_client.py b/tempest/services/compute/xml/fixed_ips_client.py
index 0475530..e14ced6 100644
--- a/tempest/services/compute/xml/fixed_ips_client.py
+++ b/tempest/services/compute/xml/fixed_ips_client.py
@@ -15,10 +15,8 @@
 
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
 
 CONF = config.CONF
 
@@ -43,7 +41,7 @@
         # accept any action key value here to permit tests to cover cases with
         # invalid actions raising badrequest.
         key, value = body.popitem()
-        xml_body = Element(key)
-        xml_body.append(Text(value))
-        resp, body = self.post(url, str(Document(xml_body)))
+        xml_body = xml_utils.Element(key)
+        xml_body.append(xml_utils.Text(value))
+        resp, body = self.post(url, str(xml_utils.Document(xml_body)))
         return resp, body
diff --git a/tempest/services/compute/xml/flavors_client.py b/tempest/services/compute/xml/flavors_client.py
index 68a27c9..68ef323 100644
--- a/tempest/services/compute/xml/flavors_client.py
+++ b/tempest/services/compute/xml/flavors_client.py
@@ -18,12 +18,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -76,7 +72,7 @@
         return flavor
 
     def _parse_array(self, node):
-        return [self._format_flavor(xml_to_json(x)) for x in node]
+        return [self._format_flavor(xml_utils.xml_to_json(x)) for x in node]
 
     def _list_flavors(self, url, params):
         if params:
@@ -96,19 +92,19 @@
 
     def get_flavor_details(self, flavor_id):
         resp, body = self.get("flavors/%s" % str(flavor_id))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         flavor = self._format_flavor(body)
         return resp, flavor
 
     def create_flavor(self, name, ram, vcpus, disk, flavor_id, **kwargs):
         """Creates a new flavor or instance type."""
-        flavor = Element("flavor",
-                         xmlns=XMLNS_11,
-                         ram=ram,
-                         vcpus=vcpus,
-                         disk=disk,
-                         id=flavor_id,
-                         name=name)
+        flavor = xml_utils.Element("flavor",
+                                   xmlns=xml_utils.XMLNS_11,
+                                   ram=ram,
+                                   vcpus=vcpus,
+                                   disk=disk,
+                                   id=flavor_id,
+                                   name=name)
         if kwargs.get('rxtx'):
             flavor.add_attr('rxtx_factor', kwargs.get('rxtx'))
         if kwargs.get('swap'):
@@ -121,8 +117,8 @@
                             kwargs.get('is_public'))
         flavor.add_attr('xmlns:OS-FLV-EXT-DATA', XMLNS_OS_FLV_EXT_DATA)
         flavor.add_attr('xmlns:os-flavor-access', XMLNS_OS_FLV_ACCESS)
-        resp, body = self.post('flavors', str(Document(flavor)))
-        body = xml_to_json(etree.fromstring(body))
+        resp, body = self.post('flavors', str(xml_utils.Document(flavor)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         flavor = self._format_flavor(body)
         return resp, flavor
 
@@ -142,18 +138,18 @@
 
     def set_flavor_extra_spec(self, flavor_id, specs):
         """Sets extra Specs to the mentioned flavor."""
-        extra_specs = Element("extra_specs")
+        extra_specs = xml_utils.Element("extra_specs")
         for key in specs.keys():
             extra_specs.add_attr(key, specs[key])
         resp, body = self.post('flavors/%s/os-extra_specs' % flavor_id,
-                               str(Document(extra_specs)))
-        body = xml_to_json(etree.fromstring(body))
+                               str(xml_utils.Document(extra_specs)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def get_flavor_extra_spec(self, flavor_id):
         """Gets extra Specs of the mentioned flavor."""
         resp, body = self.get('flavors/%s/os-extra_specs' % flavor_id)
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def get_flavor_extra_spec_with_key(self, flavor_id, key):
@@ -163,21 +159,21 @@
         body = {}
         element = etree.fromstring(xml_body)
         key = element.get('key')
-        body[key] = xml_to_json(element)
+        body[key] = xml_utils.xml_to_json(element)
         return resp, body
 
     def update_flavor_extra_spec(self, flavor_id, key, **kwargs):
         """Update extra Specs details of the mentioned flavor and key."""
-        doc = Document()
+        doc = xml_utils.Document()
         for (k, v) in kwargs.items():
-            element = Element(k)
+            element = xml_utils.Element(k)
             doc.append(element)
-            value = Text(v)
+            value = xml_utils.Text(v)
             element.append(value)
 
         resp, body = self.put('flavors/%s/os-extra_specs/%s' %
                               (flavor_id, key), str(doc))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, {key: body}
 
     def unset_flavor_extra_spec(self, flavor_id, key):
@@ -186,7 +182,7 @@
                            key))
 
     def _parse_array_access(self, node):
-        return [xml_to_json(x) for x in node]
+        return [xml_utils.xml_to_json(x) for x in node]
 
     def list_flavor_access(self, flavor_id):
         """Gets flavor access information given the flavor id."""
@@ -196,8 +192,8 @@
 
     def add_flavor_access(self, flavor_id, tenant_id):
         """Add flavor access for the specified tenant."""
-        doc = Document()
-        server = Element("addTenantAccess")
+        doc = xml_utils.Document()
+        server = xml_utils.Element("addTenantAccess")
         doc.append(server)
         server.add_attr("tenant", tenant_id)
         resp, body = self.post('flavors/%s/action' % str(flavor_id), str(doc))
@@ -206,8 +202,8 @@
 
     def remove_flavor_access(self, flavor_id, tenant_id):
         """Remove flavor access from the specified tenant."""
-        doc = Document()
-        server = Element("removeTenantAccess")
+        doc = xml_utils.Document()
+        server = xml_utils.Element("removeTenantAccess")
         doc.append(server)
         server.add_attr("tenant", tenant_id)
         resp, body = self.post('flavors/%s/action' % str(flavor_id), str(doc))
diff --git a/tempest/services/compute/xml/floating_ips_client.py b/tempest/services/compute/xml/floating_ips_client.py
index be54753..fa4aa07 100644
--- a/tempest/services/compute/xml/floating_ips_client.py
+++ b/tempest/services/compute/xml/floating_ips_client.py
@@ -17,12 +17,9 @@
 import urllib
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -37,11 +34,11 @@
     def _parse_array(self, node):
         array = []
         for child in node.getchildren():
-            array.append(xml_to_json(child))
+            array.append(xml_utils.xml_to_json(child))
         return array
 
     def _parse_floating_ip(self, body):
-        json = xml_to_json(body)
+        json = xml_utils.xml_to_json(body)
         return json
 
     def list_floating_ips(self, params=None):
@@ -67,9 +64,9 @@
         """Allocate a floating IP to the project."""
         url = 'os-floating-ips'
         if pool_name:
-            doc = Document()
-            pool = Element("pool")
-            pool.append(Text(pool_name))
+            doc = xml_utils.Document()
+            pool = xml_utils.Element("pool")
+            pool.append(xml_utils.Text(pool_name))
             doc.append(pool)
             resp, body = self.post(url, str(doc))
         else:
@@ -86,8 +83,8 @@
     def associate_floating_ip_to_server(self, floating_ip, server_id):
         """Associate the provided floating IP to a specific server."""
         url = "servers/%s/action" % str(server_id)
-        doc = Document()
-        server = Element("addFloatingIp")
+        doc = xml_utils.Document()
+        server = xml_utils.Element("addFloatingIp")
         doc.append(server)
         server.add_attr("address", floating_ip)
         resp, body = self.post(url, str(doc))
@@ -96,8 +93,8 @@
     def disassociate_floating_ip_from_server(self, floating_ip, server_id):
         """Disassociate the provided floating IP from a specific server."""
         url = "servers/%s/action" % str(server_id)
-        doc = Document()
-        server = Element("removeFloatingIp")
+        doc = xml_utils.Document()
+        server = xml_utils.Element("removeFloatingIp")
         doc.append(server)
         server.add_attr("address", floating_ip)
         resp, body = self.post(url, str(doc))
diff --git a/tempest/services/compute/xml/hosts_client.py b/tempest/services/compute/xml/hosts_client.py
index b74cd04..23a7dd6 100644
--- a/tempest/services/compute/xml/hosts_client.py
+++ b/tempest/services/compute/xml/hosts_client.py
@@ -16,10 +16,8 @@
 
 from lxml import etree
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -40,7 +38,7 @@
 
         resp, body = self.get(url)
         node = etree.fromstring(body)
-        body = [xml_to_json(x) for x in node.getchildren()]
+        body = [xml_utils.xml_to_json(x) for x in node.getchildren()]
         return resp, body
 
     def show_host_detail(self, hostname):
@@ -48,20 +46,20 @@
 
         resp, body = self.get("os-hosts/%s" % str(hostname))
         node = etree.fromstring(body)
-        body = [xml_to_json(node)]
+        body = [xml_utils.xml_to_json(node)]
         return resp, body
 
     def update_host(self, hostname, **kwargs):
         """Update a host."""
 
-        request_body = Element("updates")
+        request_body = xml_utils.Element("updates")
         if kwargs:
             for k, v in kwargs.iteritems():
-                request_body.append(Element(k, v))
+                request_body.append(xml_utils.Element(k, v))
         resp, body = self.put("os-hosts/%s" % str(hostname),
-                              str(Document(request_body)))
+                              str(xml_utils.Document(request_body)))
         node = etree.fromstring(body)
-        body = [xml_to_json(x) for x in node.getchildren()]
+        body = [xml_utils.xml_to_json(x) for x in node.getchildren()]
         return resp, body
 
     def startup_host(self, hostname):
@@ -69,7 +67,7 @@
 
         resp, body = self.get("os-hosts/%s/startup" % str(hostname))
         node = etree.fromstring(body)
-        body = [xml_to_json(x) for x in node.getchildren()]
+        body = [xml_utils.xml_to_json(x) for x in node.getchildren()]
         return resp, body
 
     def shutdown_host(self, hostname):
@@ -77,7 +75,7 @@
 
         resp, body = self.get("os-hosts/%s/shutdown" % str(hostname))
         node = etree.fromstring(body)
-        body = [xml_to_json(x) for x in node.getchildren()]
+        body = [xml_utils.xml_to_json(x) for x in node.getchildren()]
         return resp, body
 
     def reboot_host(self, hostname):
@@ -85,5 +83,5 @@
 
         resp, body = self.get("os-hosts/%s/reboot" % str(hostname))
         node = etree.fromstring(body)
-        body = [xml_to_json(x) for x in node.getchildren()]
+        body = [xml_utils.xml_to_json(x) for x in node.getchildren()]
         return resp, body
diff --git a/tempest/services/compute/xml/hypervisor_client.py b/tempest/services/compute/xml/hypervisor_client.py
index ecd7541..1452708 100644
--- a/tempest/services/compute/xml/hypervisor_client.py
+++ b/tempest/services/compute/xml/hypervisor_client.py
@@ -16,8 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -30,7 +30,7 @@
         self.service = CONF.compute.catalog_type
 
     def _parse_array(self, node):
-        return [xml_to_json(x) for x in node]
+        return [xml_utils.xml_to_json(x) for x in node]
 
     def get_hypervisor_list(self):
         """List hypervisors information."""
@@ -47,7 +47,7 @@
     def get_hypervisor_show_details(self, hyper_id):
         """Display the details of the specified hypervisor."""
         resp, body = self.get('os-hypervisors/%s' % hyper_id)
-        hypervisor = xml_to_json(etree.fromstring(body))
+        hypervisor = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, hypervisor
 
     def get_hypervisor_servers(self, hyper_name):
@@ -59,13 +59,13 @@
     def get_hypervisor_stats(self):
         """Get hypervisor statistics over all compute nodes."""
         resp, body = self.get('os-hypervisors/statistics')
-        stats = xml_to_json(etree.fromstring(body))
+        stats = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, stats
 
     def get_hypervisor_uptime(self, hyper_id):
         """Display the uptime of the specified hypervisor."""
         resp, body = self.get('os-hypervisors/%s/uptime' % hyper_id)
-        uptime = xml_to_json(etree.fromstring(body))
+        uptime = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, uptime
 
     def search_hypervisor(self, hyper_name):
diff --git a/tempest/services/compute/xml/images_client.py b/tempest/services/compute/xml/images_client.py
index 9d529be..6b15404 100644
--- a/tempest/services/compute/xml/images_client.py
+++ b/tempest/services/compute/xml/images_client.py
@@ -19,13 +19,9 @@
 
 from tempest.common import rest_client
 from tempest.common import waiters
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -40,24 +36,24 @@
         self.build_timeout = CONF.compute.build_timeout
 
     def _parse_server(self, node):
-        data = xml_to_json(node)
+        data = xml_utils.xml_to_json(node)
         return self._parse_links(node, data)
 
     def _parse_image(self, node):
         """Parses detailed XML image information into dictionary."""
-        data = xml_to_json(node)
+        data = xml_utils.xml_to_json(node)
 
         self._parse_links(node, data)
 
         # parse all metadata
         if 'metadata' in data:
-            tag = node.find('{%s}metadata' % XMLNS_11)
+            tag = node.find('{%s}metadata' % xml_utils.XMLNS_11)
             data['metadata'] = dict((x.get('key'), x.text)
                                     for x in tag.getchildren())
 
         # parse server information
         if 'server' in data:
-            tag = node.find('{%s}server' % XMLNS_11)
+            tag = node.find('{%s}server' % xml_utils.XMLNS_11)
             data['server'] = self._parse_server(tag)
         return data
 
@@ -67,7 +63,7 @@
         if 'link' in data:
             # remove single link element
             del data['link']
-            data['links'] = [xml_to_json(x) for x in
+            data['links'] = [xml_utils.xml_to_json(x) for x in
                              node.findall('{http://www.w3.org/2005/Atom}link')]
         return data
 
@@ -93,17 +89,17 @@
 
     def create_image(self, server_id, name, meta=None):
         """Creates an image of the original server."""
-        post_body = Element('createImage', name=name)
+        post_body = xml_utils.Element('createImage', name=name)
 
         if meta:
-            metadata = Element('metadata')
+            metadata = xml_utils.Element('metadata')
             post_body.append(metadata)
             for k, v in meta.items():
-                data = Element('meta', key=k)
-                data.append(Text(v))
+                data = xml_utils.Element('meta', key=k)
+                data.append(xml_utils.Text(v))
                 metadata.append(data)
         resp, body = self.post('servers/%s/action' % str(server_id),
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         return resp, body
 
     def list_images(self, params=None):
@@ -144,10 +140,10 @@
         waiters.wait_for_image_status(self, image_id, status)
 
     def _metadata_body(self, meta):
-        post_body = Element('metadata')
+        post_body = xml_utils.Element('metadata')
         for k, v in meta.items():
-            data = Element('meta', key=k)
-            data.append(Text(v))
+            data = xml_utils.Element('meta', key=k)
+            data.append(xml_utils.Text(v))
             post_body.append(data)
         return post_body
 
@@ -161,7 +157,7 @@
         """Sets the metadata for an image."""
         post_body = self._metadata_body(meta)
         resp, body = self.put('images/%s/metadata' % image_id,
-                              str(Document(post_body)))
+                              str(xml_utils.Document(post_body)))
         body = self._parse_key_value(etree.fromstring(body))
         return resp, body
 
@@ -169,7 +165,7 @@
         """Updates the metadata for an image."""
         post_body = self._metadata_body(meta)
         resp, body = self.post('images/%s/metadata' % str(image_id),
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         body = self._parse_key_value(etree.fromstring(body))
         return resp, body
 
@@ -183,19 +179,19 @@
     def set_image_metadata_item(self, image_id, key, meta):
         """Sets the value for a specific image metadata key."""
         for k, v in meta.items():
-            post_body = Element('meta', key=key)
-            post_body.append(Text(v))
+            post_body = xml_utils.Element('meta', key=key)
+            post_body.append(xml_utils.Text(v))
         resp, body = self.put('images/%s/metadata/%s' % (str(image_id), key),
-                              str(Document(post_body)))
-        body = xml_to_json(etree.fromstring(body))
+                              str(xml_utils.Document(post_body)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def update_image_metadata_item(self, image_id, key, meta):
         """Sets the value for a specific image metadata key."""
-        post_body = Document('meta', Text(meta), key=key)
+        post_body = xml_utils.Document('meta', xml_utils.Text(meta), key=key)
         resp, body = self.put('images/%s/metadata/%s' % (str(image_id), key),
                               post_body)
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body['meta']
 
     def delete_image_metadata_item(self, image_id, key):
diff --git a/tempest/services/compute/xml/instance_usage_audit_log_client.py b/tempest/services/compute/xml/instance_usage_audit_log_client.py
index 1cd8c07..b139db1 100644
--- a/tempest/services/compute/xml/instance_usage_audit_log_client.py
+++ b/tempest/services/compute/xml/instance_usage_audit_log_client.py
@@ -16,8 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -33,11 +33,13 @@
     def list_instance_usage_audit_logs(self):
         url = 'os-instance_usage_audit_log'
         resp, body = self.get(url)
-        instance_usage_audit_logs = xml_to_json(etree.fromstring(body))
+        instance_usage_audit_logs = xml_utils.xml_to_json(
+            etree.fromstring(body))
         return resp, instance_usage_audit_logs
 
     def get_instance_usage_audit_log(self, time_before):
         url = 'os-instance_usage_audit_log/%s' % time_before
         resp, body = self.get(url)
-        instance_usage_audit_log = xml_to_json(etree.fromstring(body))
+        instance_usage_audit_log = xml_utils.xml_to_json(
+            etree.fromstring(body))
         return resp, instance_usage_audit_log
diff --git a/tempest/services/compute/xml/interfaces_client.py b/tempest/services/compute/xml/interfaces_client.py
index 8d4bfcc..e30a97c 100644
--- a/tempest/services/compute/xml/interfaces_client.py
+++ b/tempest/services/compute/xml/interfaces_client.py
@@ -18,13 +18,9 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -37,9 +33,9 @@
         self.service = CONF.compute.catalog_type
 
     def _process_xml_interface(self, node):
-        iface = xml_to_json(node)
+        iface = xml_utils.xml_to_json(node)
         # NOTE(danms): if multiple addresses per interface is ever required,
-        # xml_to_json will need to be fixed or replaced in this case
+        # xml_utils.xml_to_json will need to be fixed or replaced in this case
         iface['fixed_ips'] = [dict(iface['fixed_ips']['fixed_ip'].items())]
         return iface
 
@@ -52,21 +48,21 @@
 
     def create_interface(self, server, port_id=None, network_id=None,
                          fixed_ip=None):
-        doc = Document()
-        iface = Element('interfaceAttachment')
+        doc = xml_utils.Document()
+        iface = xml_utils.Element('interfaceAttachment')
         if port_id:
-            _port_id = Element('port_id')
-            _port_id.append(Text(port_id))
+            _port_id = xml_utils.Element('port_id')
+            _port_id.append(xml_utils.Text(port_id))
             iface.append(_port_id)
         if network_id:
-            _network_id = Element('net_id')
-            _network_id.append(Text(network_id))
+            _network_id = xml_utils.Element('net_id')
+            _network_id.append(xml_utils.Text(network_id))
             iface.append(_network_id)
         if fixed_ip:
-            _fixed_ips = Element('fixed_ips')
-            _fixed_ip = Element('fixed_ip')
-            _ip_address = Element('ip_address')
-            _ip_address.append(Text(fixed_ip))
+            _fixed_ips = xml_utils.Element('fixed_ips')
+            _fixed_ip = xml_utils.Element('fixed_ip')
+            _ip_address = xml_utils.Element('ip_address')
+            _ip_address.append(xml_utils.Text(fixed_ip))
             _fixed_ip.append(_ip_address)
             _fixed_ips.append(_fixed_ip)
             iface.append(_fixed_ips)
@@ -108,18 +104,18 @@
 
     def add_fixed_ip(self, server_id, network_id):
         """Add a fixed IP to input server instance."""
-        post_body = Element("addFixedIp",
-                            xmlns=XMLNS_11,
-                            networkId=network_id)
+        post_body = xml_utils.Element("addFixedIp",
+                                      xmlns=xml_utils.XMLNS_11,
+                                      networkId=network_id)
         resp, body = self.post('servers/%s/action' % str(server_id),
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         return resp, body
 
     def remove_fixed_ip(self, server_id, ip_address):
         """Remove input fixed IP from input server instance."""
-        post_body = Element("removeFixedIp",
-                            xmlns=XMLNS_11,
-                            address=ip_address)
+        post_body = xml_utils.Element("removeFixedIp",
+                                      xmlns=xml_utils.XMLNS_11,
+                                      address=ip_address)
         resp, body = self.post('servers/%s/action' % str(server_id),
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         return resp, body
diff --git a/tempest/services/compute/xml/keypairs_client.py b/tempest/services/compute/xml/keypairs_client.py
index fb498c0..8ff37ac 100644
--- a/tempest/services/compute/xml/keypairs_client.py
+++ b/tempest/services/compute/xml/keypairs_client.py
@@ -17,11 +17,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -36,34 +33,35 @@
     def list_keypairs(self):
         resp, body = self.get("os-keypairs")
         node = etree.fromstring(body)
-        body = [{'keypair': xml_to_json(x)} for x in node.getchildren()]
+        body = [{'keypair': xml_utils.xml_to_json(x)} for x in
+                node.getchildren()]
         return resp, body
 
     def get_keypair(self, key_name):
         resp, body = self.get("os-keypairs/%s" % str(key_name))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def create_keypair(self, name, pub_key=None):
-        doc = Document()
+        doc = xml_utils.Document()
 
-        keypair_element = Element("keypair")
+        keypair_element = xml_utils.Element("keypair")
 
         if pub_key:
-            public_key_element = Element("public_key")
-            public_key_text = Text(pub_key)
+            public_key_element = xml_utils.Element("public_key")
+            public_key_text = xml_utils.Text(pub_key)
             public_key_element.append(public_key_text)
             keypair_element.append(public_key_element)
 
-        name_element = Element("name")
-        name_text = Text(name)
+        name_element = xml_utils.Element("name")
+        name_text = xml_utils.Text(name)
         name_element.append(name_text)
         keypair_element.append(name_element)
 
         doc.append(keypair_element)
 
         resp, body = self.post("os-keypairs", body=str(doc))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def delete_keypair(self, key_name):
diff --git a/tempest/services/compute/xml/quotas_client.py b/tempest/services/compute/xml/quotas_client.py
index 911c476..8a521ab 100644
--- a/tempest/services/compute/xml/quotas_client.py
+++ b/tempest/services/compute/xml/quotas_client.py
@@ -16,11 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -51,7 +48,7 @@
         if user_id:
             url += '?user_id=%s' % str(user_id)
         resp, body = self.get(url)
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         body = self._format_quota(body)
         return resp, body
 
@@ -60,7 +57,7 @@
 
         url = 'os-quota-sets/%s/defaults' % str(tenant_id)
         resp, body = self.get(url)
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         body = self._format_quota(body)
         return resp, body
 
@@ -74,8 +71,8 @@
         """
         Updates the tenant's quota limits for one or more resources
         """
-        post_body = Element("quota_set",
-                            xmlns=XMLNS_11)
+        post_body = xml_utils.Element("quota_set",
+                                      xmlns=xml_utils.XMLNS_11)
 
         if force is not None:
             post_body.add_attr('force', force)
@@ -119,8 +116,8 @@
             post_body.add_attr('security_groups', security_groups)
 
         resp, body = self.put('os-quota-sets/%s' % str(tenant_id),
-                              str(Document(post_body)))
-        body = xml_to_json(etree.fromstring(body))
+                              str(xml_utils.Document(post_body)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         body = self._format_quota(body)
         return resp, body
 
diff --git a/tempest/services/compute/xml/security_groups_client.py b/tempest/services/compute/xml/security_groups_client.py
index d53e8da..9eccb90 100644
--- a/tempest/services/compute/xml/security_groups_client.py
+++ b/tempest/services/compute/xml/security_groups_client.py
@@ -17,13 +17,9 @@
 import urllib
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -38,11 +34,11 @@
     def _parse_array(self, node):
         array = []
         for child in node.getchildren():
-            array.append(xml_to_json(child))
+            array.append(xml_utils.xml_to_json(child))
         return array
 
     def _parse_body(self, body):
-        json = xml_to_json(body)
+        json = xml_utils.xml_to_json(body)
         return json
 
     def list_security_groups(self, params=None):
@@ -69,12 +65,12 @@
         name (Required): Name of security group.
         description (Required): Description of security group.
         """
-        security_group = Element("security_group", name=name)
-        des = Element("description")
-        des.append(Text(content=description))
+        security_group = xml_utils.Element("security_group", name=name)
+        des = xml_utils.Element("description")
+        des.append(xml_utils.Text(content=description))
         security_group.append(des)
         resp, body = self.post('os-security-groups',
-                               str(Document(security_group)))
+                               str(xml_utils.Document(security_group)))
         body = self._parse_body(etree.fromstring(body))
         return resp, body
 
@@ -86,18 +82,18 @@
         name: new name of security group
         description: new description of security group
         """
-        security_group = Element("security_group")
+        security_group = xml_utils.Element("security_group")
         if name:
-            sg_name = Element("name")
-            sg_name.append(Text(content=name))
+            sg_name = xml_utils.Element("name")
+            sg_name.append(xml_utils.Text(content=name))
             security_group.append(sg_name)
         if description:
-            des = Element("description")
-            des.append(Text(content=description))
+            des = xml_utils.Element("description")
+            des.append(xml_utils.Text(content=description))
             security_group.append(des)
         resp, body = self.put('os-security-groups/%s' %
                               str(security_group_id),
-                              str(Document(security_group)))
+                              str(xml_utils.Document(security_group)))
         body = self._parse_body(etree.fromstring(body))
         return resp, body
 
@@ -117,7 +113,7 @@
         cidr     : CIDR for address range.
         group_id : ID of the Source group
         """
-        group_rule = Element("security_group_rule")
+        group_rule = xml_utils.Element("security_group_rule")
 
         elements = dict()
         elements['cidr'] = kwargs.get('cidr')
@@ -129,12 +125,12 @@
 
         for k, v in elements.items():
             if v is not None:
-                element = Element(k)
-                element.append(Text(content=str(v)))
+                element = xml_utils.Element(k)
+                element.append(xml_utils.Text(content=str(v)))
                 group_rule.append(element)
 
         url = 'os-security-group-rules'
-        resp, body = self.post(url, str(Document(group_rule)))
+        resp, body = self.post(url, str(xml_utils.Document(group_rule)))
         body = self._parse_body(etree.fromstring(body))
         return resp, body
 
@@ -151,8 +147,8 @@
         secgroups = body.getchildren()
         for secgroup in secgroups:
             if secgroup.get('id') == security_group_id:
-                node = secgroup.find('{%s}rules' % XMLNS_11)
-                rules = [xml_to_json(x) for x in node.getchildren()]
+                node = secgroup.find('{%s}rules' % xml_utils.XMLNS_11)
+                rules = [xml_utils.xml_to_json(x) for x in node.getchildren()]
                 return resp, rules
         raise exceptions.NotFound('No such Security Group')
 
diff --git a/tempest/services/compute/xml/servers_client.py b/tempest/services/compute/xml/servers_client.py
index 7a2a071..37de147 100644
--- a/tempest/services/compute/xml/servers_client.py
+++ b/tempest/services/compute/xml/servers_client.py
@@ -21,14 +21,10 @@
 
 from tempest.common import rest_client
 from tempest.common import waiters
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
 from tempest.openstack.common import log as logging
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -60,12 +56,13 @@
 
 def _translate_network_xml_to_json(network):
     return [_translate_ip_xml_json(ip.attrib)
-            for ip in network.findall('{%s}ip' % XMLNS_11)]
+            for ip in network.findall('{%s}ip' % xml_utils.XMLNS_11)]
 
 
 def _translate_addresses_xml_to_json(xml_addresses):
     return dict((network.attrib['id'], _translate_network_xml_to_json(network))
-                for network in xml_addresses.findall('{%s}network' % XMLNS_11))
+                for network in xml_addresses.findall('{%s}network' %
+                                                     xml_utils.XMLNS_11))
 
 
 def _translate_server_xml_to_json(xml_dom):
@@ -97,16 +94,16 @@
                                         'version': 6}],
                    'foo_novanetwork': [{'addr': '192.168.0.4', 'version': 4}]}}
     """
-    nsmap = {'api': XMLNS_11}
+    nsmap = {'api': xml_utils.XMLNS_11}
     addresses = xml_dom.xpath('/api:server/api:addresses', namespaces=nsmap)
     if addresses:
         if len(addresses) > 1:
             raise ValueError('Expected only single `addresses` element.')
         json_addresses = _translate_addresses_xml_to_json(addresses[0])
-        json = xml_to_json(xml_dom)
+        json = xml_utils.xml_to_json(xml_dom)
         json['addresses'] = json_addresses
     else:
-        json = xml_to_json(xml_dom)
+        json = xml_utils.xml_to_json(xml_dom)
     diskConfig = ('{http://docs.openstack.org'
                   '/compute/ext/disk_config/api/v1.1}diskConfig')
     terminated_at = ('{http://docs.openstack.org/'
@@ -157,7 +154,7 @@
         del json['link']
         json['links'] = []
         for linknode in node.findall('{http://www.w3.org/2005/Atom}link'):
-            json['links'].append(xml_to_json(linknode))
+            json['links'].append(xml_utils.xml_to_json(linknode))
 
     def _parse_server(self, body):
         json = _translate_server_xml_to_json(body)
@@ -165,7 +162,7 @@
         if 'metadata' in json and json['metadata']:
             # NOTE(danms): if there was metadata, we need to re-parse
             # that as a special type
-            metadata_tag = body.find('{%s}metadata' % XMLNS_11)
+            metadata_tag = body.find('{%s}metadata' % xml_utils.XMLNS_11)
             json["metadata"] = self._parse_key_value(metadata_tag)
         if 'link' in json:
             self._parse_links(body, json)
@@ -242,7 +239,7 @@
     def _parse_array(self, node):
         array = []
         for child in node.getchildren():
-            array.append(xml_to_json(child))
+            array.append(xml_utils.xml_to_json(child))
         return array
 
     def list_servers(self, params=None):
@@ -265,8 +262,8 @@
 
     def update_server(self, server_id, name=None, meta=None, accessIPv4=None,
                       accessIPv6=None, disk_config=None):
-        doc = Document()
-        server = Element("server")
+        doc = xml_utils.Document()
+        server = xml_utils.Element("server")
         doc.append(server)
 
         if name is not None:
@@ -280,15 +277,15 @@
                             "compute/ext/disk_config/api/v1.1")
             server.add_attr("OS-DCF:diskConfig", disk_config)
         if meta is not None:
-            metadata = Element("metadata")
+            metadata = xml_utils.Element("metadata")
             server.append(metadata)
             for k, v in meta:
-                meta = Element("meta", key=k)
-                meta.append(Text(v))
+                meta = xml_utils.Element("meta", key=k)
+                meta.append(xml_utils.Text(v))
                 metadata.append(meta)
 
         resp, body = self.put('servers/%s' % str(server_id), str(doc))
-        return resp, xml_to_json(etree.fromstring(body))
+        return resp, xml_utils.xml_to_json(etree.fromstring(body))
 
     def create_server(self, name, image_ref, flavor_ref, **kwargs):
         """
@@ -312,11 +309,11 @@
         max_count: Count of maximum number of instances to launch.
         disk_config: Determines if user or admin controls disk configuration.
         """
-        server = Element("server",
-                         xmlns=XMLNS_11,
-                         imageRef=image_ref,
-                         flavorRef=flavor_ref,
-                         name=name)
+        server = xml_utils.Element("server",
+                                   xmlns=xml_utils.XMLNS_11,
+                                   imageRef=image_ref,
+                                   flavorRef=flavor_ref,
+                                   name=name)
 
         for attr in ["adminPass", "accessIPv4", "accessIPv6", "key_name",
                      "user_data", "availability_zone", "min_count",
@@ -330,46 +327,46 @@
             server.add_attr('OS-DCF:diskConfig', kwargs['disk_config'])
 
         if 'security_groups' in kwargs:
-            secgroups = Element("security_groups")
+            secgroups = xml_utils.Element("security_groups")
             server.append(secgroups)
             for secgroup in kwargs['security_groups']:
-                s = Element("security_group", name=secgroup['name'])
+                s = xml_utils.Element("security_group", name=secgroup['name'])
                 secgroups.append(s)
 
         if 'networks' in kwargs:
-            networks = Element("networks")
+            networks = xml_utils.Element("networks")
             server.append(networks)
             for network in kwargs['networks']:
-                s = Element("network", uuid=network['uuid'],
-                            fixed_ip=network['fixed_ip'])
+                s = xml_utils.Element("network", uuid=network['uuid'],
+                                      fixed_ip=network['fixed_ip'])
                 networks.append(s)
 
         if 'meta' in kwargs:
-            metadata = Element("metadata")
+            metadata = xml_utils.Element("metadata")
             server.append(metadata)
             for k, v in kwargs['meta'].items():
-                meta = Element("meta", key=k)
-                meta.append(Text(v))
+                meta = xml_utils.Element("meta", key=k)
+                meta.append(xml_utils.Text(v))
                 metadata.append(meta)
 
         if 'personality' in kwargs:
-            personality = Element('personality')
+            personality = xml_utils.Element('personality')
             server.append(personality)
             for k in kwargs['personality']:
-                temp = Element('file', path=k['path'])
-                temp.append(Text(k['contents']))
+                temp = xml_utils.Element('file', path=k['path'])
+                temp.append(xml_utils.Text(k['contents']))
                 personality.append(temp)
 
         if 'sched_hints' in kwargs:
             sched_hints = kwargs.get('sched_hints')
-            hints = Element("os:scheduler_hints")
-            hints.add_attr('xmlns:os', XMLNS_11)
+            hints = xml_utils.Element("os:scheduler_hints")
+            hints.add_attr('xmlns:os', xml_utils.XMLNS_11)
             for attr in sched_hints:
-                p1 = Element(attr)
+                p1 = xml_utils.Element(attr)
                 p1.append(sched_hints[attr])
                 hints.append(p1)
             server.append(hints)
-        resp, body = self.post('servers', str(Document(server)))
+        resp, body = self.post('servers', str(xml_utils.Document(server)))
         server = self._parse_server(etree.fromstring(body))
         return resp, server
 
@@ -427,11 +424,11 @@
 
     def action(self, server_id, action_name, response_key, **kwargs):
         if 'xmlns' not in kwargs:
-            kwargs['xmlns'] = XMLNS_11
-        doc = Document((Element(action_name, **kwargs)))
+            kwargs['xmlns'] = xml_utils.XMLNS_11
+        doc = xml_utils.Document((xml_utils.Element(action_name, **kwargs)))
         resp, body = self.post("servers/%s/action" % server_id, str(doc))
         if response_key is not None:
-            body = xml_to_json(etree.fromstring(body))
+            body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def create_backup(self, server_id, backup_type, rotation, name):
@@ -447,7 +444,7 @@
 
     def get_password(self, server_id):
         resp, body = self.get("servers/%s/os-server-password" % str(server_id))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def delete_password(self, server_id):
@@ -470,24 +467,23 @@
                                      "compute/ext/disk_config/api/v1.1"
             kwargs['xmlns:atom'] = "http://www.w3.org/2005/Atom"
         if 'xmlns' not in kwargs:
-            kwargs['xmlns'] = XMLNS_11
+            kwargs['xmlns'] = xml_utils.XMLNS_11
 
         attrs = kwargs.copy()
         if 'metadata' in attrs:
             del attrs['metadata']
-        rebuild = Element("rebuild",
-                          **attrs)
+        rebuild = xml_utils.Element("rebuild", **attrs)
 
         if 'metadata' in kwargs:
-            metadata = Element("metadata")
+            metadata = xml_utils.Element("metadata")
             rebuild.append(metadata)
             for k, v in kwargs['metadata'].items():
-                meta = Element("meta", key=k)
-                meta.append(Text(v))
+                meta = xml_utils.Element("meta", key=k)
+                meta.append(xml_utils.Text(v))
                 metadata.append(meta)
 
         resp, body = self.post('servers/%s/action' % server_id,
-                               str(Document(rebuild)))
+                               str(xml_utils.Document(rebuild)))
         server = self._parse_server(etree.fromstring(body))
         return resp, server
 
@@ -525,14 +521,14 @@
     def live_migrate_server(self, server_id, dest_host, use_block_migration):
         """This should be called with administrator privileges ."""
 
-        req_body = Element("os-migrateLive",
-                           xmlns=XMLNS_11,
-                           disk_over_commit=False,
-                           block_migration=use_block_migration,
-                           host=dest_host)
+        req_body = xml_utils.Element("os-migrateLive",
+                                     xmlns=xml_utils.XMLNS_11,
+                                     disk_over_commit=False,
+                                     block_migration=use_block_migration,
+                                     host=dest_host)
 
         resp, body = self.post("servers/%s/action" % str(server_id),
-                               str(Document(req_body)))
+                               str(xml_utils.Document(req_body)))
         return resp, body
 
     def list_server_metadata(self, server_id):
@@ -541,44 +537,44 @@
         return resp, body
 
     def set_server_metadata(self, server_id, meta, no_metadata_field=False):
-        doc = Document()
+        doc = xml_utils.Document()
         if not no_metadata_field:
-            metadata = Element("metadata")
+            metadata = xml_utils.Element("metadata")
             doc.append(metadata)
             for k, v in meta.items():
-                meta_element = Element("meta", key=k)
-                meta_element.append(Text(v))
+                meta_element = xml_utils.Element("meta", key=k)
+                meta_element.append(xml_utils.Text(v))
                 metadata.append(meta_element)
         resp, body = self.put('servers/%s/metadata' % str(server_id), str(doc))
-        return resp, xml_to_json(etree.fromstring(body))
+        return resp, xml_utils.xml_to_json(etree.fromstring(body))
 
     def update_server_metadata(self, server_id, meta):
-        doc = Document()
-        metadata = Element("metadata")
+        doc = xml_utils.Document()
+        metadata = xml_utils.Element("metadata")
         doc.append(metadata)
         for k, v in meta.items():
-            meta_element = Element("meta", key=k)
-            meta_element.append(Text(v))
+            meta_element = xml_utils.Element("meta", key=k)
+            meta_element.append(xml_utils.Text(v))
             metadata.append(meta_element)
         resp, body = self.post("/servers/%s/metadata" % str(server_id),
                                str(doc))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def get_server_metadata_item(self, server_id, key):
         resp, body = self.get("servers/%s/metadata/%s" % (str(server_id), key))
         return resp, dict([(etree.fromstring(body).attrib['key'],
-                            xml_to_json(etree.fromstring(body)))])
+                            xml_utils.xml_to_json(etree.fromstring(body)))])
 
     def set_server_metadata_item(self, server_id, key, meta):
-        doc = Document()
+        doc = xml_utils.Document()
         for k, v in meta.items():
-            meta_element = Element("meta", key=k)
-            meta_element.append(Text(v))
+            meta_element = xml_utils.Element("meta", key=k)
+            meta_element.append(xml_utils.Text(v))
             doc.append(meta_element)
         resp, body = self.put('servers/%s/metadata/%s' % (str(server_id), key),
                               str(doc))
-        return resp, xml_to_json(etree.fromstring(body))
+        return resp, xml_utils.xml_to_json(etree.fromstring(body))
 
     def delete_server_metadata_item(self, server_id, key):
         resp, body = self.delete("servers/%s/metadata/%s" %
@@ -607,10 +603,10 @@
         return self.action(server_id, 'unrescue', None)
 
     def attach_volume(self, server_id, volume_id, device='/dev/vdz'):
-        post_body = Element("volumeAttachment", volumeId=volume_id,
-                            device=device)
+        post_body = xml_utils.Element("volumeAttachment", volumeId=volume_id,
+                                      device=device)
         resp, body = self.post('servers/%s/os-volume_attachments' % server_id,
-                               str(Document(post_body)))
+                               str(xml_utils.Document(post_body)))
         return resp, body
 
     def detach_volume(self, server_id, volume_id):
@@ -623,7 +619,7 @@
     def get_server_diagnostics(self, server_id):
         """Get the usage data for a server."""
         resp, body = self.get("servers/%s/diagnostics" % server_id)
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def list_instance_actions(self, server_id):
@@ -636,7 +632,7 @@
         """Returns the action details of the provided server."""
         resp, body = self.get("servers/%s/os-instance-actions/%s" %
                               (server_id, request_id))
-        body = xml_to_json(etree.fromstring(body))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def force_delete_server(self, server_id, **kwargs):
diff --git a/tempest/services/compute/xml/services_client.py b/tempest/services/compute/xml/services_client.py
index d7b8a60..e1e78d0 100644
--- a/tempest/services/compute/xml/services_client.py
+++ b/tempest/services/compute/xml/services_client.py
@@ -19,10 +19,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -41,7 +39,7 @@
 
         resp, body = self.get(url)
         node = etree.fromstring(body)
-        body = [xml_to_json(x) for x in node.getchildren()]
+        body = [xml_utils.xml_to_json(x) for x in node.getchildren()]
         return resp, body
 
     def enable_service(self, host_name, binary):
@@ -50,12 +48,13 @@
         host_name: Name of host
         binary: Service binary
         """
-        post_body = Element("service")
+        post_body = xml_utils.Element("service")
         post_body.add_attr('binary', binary)
         post_body.add_attr('host', host_name)
 
-        resp, body = self.put('os-services/enable', str(Document(post_body)))
-        body = xml_to_json(etree.fromstring(body))
+        resp, body = self.put('os-services/enable', str(
+            xml_utils.Document(post_body)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def disable_service(self, host_name, binary):
@@ -64,10 +63,11 @@
         host_name: Name of host
         binary: Service binary
         """
-        post_body = Element("service")
+        post_body = xml_utils.Element("service")
         post_body.add_attr('binary', binary)
         post_body.add_attr('host', host_name)
 
-        resp, body = self.put('os-services/disable', str(Document(post_body)))
-        body = xml_to_json(etree.fromstring(body))
+        resp, body = self.put('os-services/disable', str(
+            xml_utils.Document(post_body)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
diff --git a/tempest/services/compute/xml/tenant_usages_client.py b/tempest/services/compute/xml/tenant_usages_client.py
index 79f0ac9..0b19f63 100644
--- a/tempest/services/compute/xml/tenant_usages_client.py
+++ b/tempest/services/compute/xml/tenant_usages_client.py
@@ -18,8 +18,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
-from tempest.services.compute.xml.common import xml_to_json
 
 CONF = config.CONF
 
@@ -32,7 +32,7 @@
         self.service = CONF.compute.catalog_type
 
     def _parse_array(self, node):
-        json = xml_to_json(node)
+        json = xml_utils.xml_to_json(node)
         return json
 
     def list_tenant_usages(self, params=None):
diff --git a/tempest/services/compute/xml/volumes_extensions_client.py b/tempest/services/compute/xml/volumes_extensions_client.py
index 570b715..e9c5035 100644
--- a/tempest/services/compute/xml/volumes_extensions_client.py
+++ b/tempest/services/compute/xml/volumes_extensions_client.py
@@ -19,13 +19,9 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml.common import Document
-from tempest.services.compute.xml.common import Element
-from tempest.services.compute.xml.common import Text
-from tempest.services.compute.xml.common import xml_to_json
-from tempest.services.compute.xml.common import XMLNS_11
 
 CONF = config.CONF
 
@@ -51,7 +47,7 @@
                 vol['metadata'] = dict((meta.get('key'),
                                         meta.text) for meta in list(child))
             else:
-                vol[tag] = xml_to_json(child)
+                vol[tag] = xml_utils.xml_to_json(child)
         return vol
 
     def list_volumes(self, params=None):
@@ -96,23 +92,23 @@
         :param display_name: Optional Volume Name.
         :param metadata: An optional dictionary of values for metadata.
         """
-        volume = Element("volume",
-                         xmlns=XMLNS_11,
-                         size=size)
+        volume = xml_utils.Element("volume",
+                                   xmlns=xml_utils.XMLNS_11,
+                                   size=size)
         if display_name:
             volume.add_attr('display_name', display_name)
 
         if metadata:
-            _metadata = Element('metadata')
+            _metadata = xml_utils.Element('metadata')
             volume.append(_metadata)
             for key, value in metadata.items():
-                meta = Element('meta')
+                meta = xml_utils.Element('meta')
                 meta.add_attr('key', key)
-                meta.append(Text(value))
+                meta.append(xml_utils.Text(value))
                 _metadata.append(meta)
 
-        resp, body = self.post('os-volumes', str(Document(volume)))
-        body = xml_to_json(etree.fromstring(body))
+        resp, body = self.post('os-volumes', str(xml_utils.Document(volume)))
+        body = xml_utils.xml_to_json(etree.fromstring(body))
         return resp, body
 
     def delete_volume(self, volume_id):
diff --git a/tempest/services/identity/json/identity_client.py b/tempest/services/identity/json/identity_client.py
index 58451fb..c95faaa 100644
--- a/tempest/services/identity/json/identity_client.py
+++ b/tempest/services/identity/json/identity_client.py
@@ -49,6 +49,12 @@
         resp, body = self.post('OS-KSADM/roles', post_body)
         return resp, self._parse_resp(body)
 
+    def get_role(self, role_id):
+        """Get a role by its id."""
+        resp, body = self.get('OS-KSADM/roles/%s' % role_id)
+        body = json.loads(body)
+        return resp, body['role']
+
     def create_tenant(self, name, **kwargs):
         """
         Create a tenant
diff --git a/tempest/services/identity/v3/xml/credentials_client.py b/tempest/services/identity/v3/xml/credentials_client.py
index 70f85a1..3c44188 100644
--- a/tempest/services/identity/v3/xml/credentials_client.py
+++ b/tempest/services/identity/v3/xml/credentials_client.py
@@ -18,8 +18,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/identity/v3/xml/endpoints_client.py b/tempest/services/identity/v3/xml/endpoints_client.py
index a1f9811..93dc3dc 100644
--- a/tempest/services/identity/v3/xml/endpoints_client.py
+++ b/tempest/services/identity/v3/xml/endpoints_client.py
@@ -17,8 +17,8 @@
 
 from tempest.common import http
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/identity/v3/xml/identity_client.py b/tempest/services/identity/v3/xml/identity_client.py
index 8f42924..ffeb979 100644
--- a/tempest/services/identity/v3/xml/identity_client.py
+++ b/tempest/services/identity/v3/xml/identity_client.py
@@ -18,9 +18,9 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/identity/v3/xml/policy_client.py b/tempest/services/identity/v3/xml/policy_client.py
index bf4cce7..e903089 100644
--- a/tempest/services/identity/v3/xml/policy_client.py
+++ b/tempest/services/identity/v3/xml/policy_client.py
@@ -17,8 +17,8 @@
 
 from tempest.common import http
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/identity/v3/xml/service_client.py b/tempest/services/identity/v3/xml/service_client.py
index 966d7f7..37ed892 100644
--- a/tempest/services/identity/v3/xml/service_client.py
+++ b/tempest/services/identity/v3/xml/service_client.py
@@ -16,8 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/identity/xml/identity_client.py b/tempest/services/identity/xml/identity_client.py
index c5bf310..c48bc90 100644
--- a/tempest/services/identity/xml/identity_client.py
+++ b/tempest/services/identity/xml/identity_client.py
@@ -12,8 +12,8 @@
 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 #    License for the specific language governing permissions and limitations
 #    under the License.
+from tempest.common import xml_utils as xml
 from tempest import config
-from tempest.services.compute.xml import common as xml
 from tempest.services.identity.json import identity_client
 
 CONF = config.CONF
@@ -31,6 +31,11 @@
                                str(xml.Document(create_role)))
         return resp, self._parse_resp(body)
 
+    def get_role(self, role_id):
+        """Get a role by its id."""
+        resp, body = self.get('OS-KSADM/roles/%s' % role_id)
+        return resp, self._parse_resp(body)
+
     def create_tenant(self, name, **kwargs):
         """
         Create a tenant
diff --git a/tempest/services/network/xml/network_client.py b/tempest/services/network/xml/network_client.py
index 68bc424..26dc672 100644
--- a/tempest/services/network/xml/network_client.py
+++ b/tempest/services/network/xml/network_client.py
@@ -14,7 +14,7 @@
 import xml.etree.ElementTree as ET
 
 from tempest.common import rest_client
-from tempest.services.compute.xml import common
+from tempest.common import xml_utils as common
 from tempest.services.network import network_client_base as client_base
 
 
diff --git a/tempest/services/telemetry/xml/telemetry_client.py b/tempest/services/telemetry/xml/telemetry_client.py
index 673f98e..3bee8bf 100644
--- a/tempest/services/telemetry/xml/telemetry_client.py
+++ b/tempest/services/telemetry/xml/telemetry_client.py
@@ -16,7 +16,7 @@
 from lxml import etree
 
 from tempest.common import rest_client
-from tempest.services.compute.xml import common
+from tempest.common import xml_utils as common
 import tempest.services.telemetry.telemetry_client_base as client
 
 
diff --git a/tempest/services/volume/v2/xml/volumes_client.py b/tempest/services/volume/v2/xml/volumes_client.py
index 0b8f47c..e735a65 100644
--- a/tempest/services/volume/v2/xml/volumes_client.py
+++ b/tempest/services/volume/v2/xml/volumes_client.py
@@ -19,9 +19,9 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/volume/xml/admin/volume_hosts_client.py b/tempest/services/volume/xml/admin/volume_hosts_client.py
index e34b9f0..967c7c2 100644
--- a/tempest/services/volume/xml/admin/volume_hosts_client.py
+++ b/tempest/services/volume/xml/admin/volume_hosts_client.py
@@ -18,8 +18,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/volume/xml/admin/volume_quotas_client.py b/tempest/services/volume/xml/admin/volume_quotas_client.py
index d2eac34..710fb3a 100644
--- a/tempest/services/volume/xml/admin/volume_quotas_client.py
+++ b/tempest/services/volume/xml/admin/volume_quotas_client.py
@@ -17,8 +17,8 @@
 from ast import literal_eval
 from lxml import etree
 
+from tempest.common import xml_utils as xml
 from tempest import config
-from tempest.services.compute.xml import common as xml
 from tempest.services.volume.json.admin import volume_quotas_client
 
 CONF = config.CONF
diff --git a/tempest/services/volume/xml/admin/volume_types_client.py b/tempest/services/volume/xml/admin/volume_types_client.py
index 1fa3e73..90897ee 100644
--- a/tempest/services/volume/xml/admin/volume_types_client.py
+++ b/tempest/services/volume/xml/admin/volume_types_client.py
@@ -18,9 +18,9 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/volume/xml/extensions_client.py b/tempest/services/volume/xml/extensions_client.py
index 4861733..2986fcd 100644
--- a/tempest/services/volume/xml/extensions_client.py
+++ b/tempest/services/volume/xml/extensions_client.py
@@ -16,8 +16,8 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/volume/xml/snapshots_client.py b/tempest/services/volume/xml/snapshots_client.py
index 9ad86d2..4b1ba25 100644
--- a/tempest/services/volume/xml/snapshots_client.py
+++ b/tempest/services/volume/xml/snapshots_client.py
@@ -16,10 +16,10 @@
 from lxml import etree
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
 from tempest import exceptions
 from tempest.openstack.common import log as logging
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/services/volume/xml/volumes_client.py b/tempest/services/volume/xml/volumes_client.py
index 8e886ce..6866dad 100644
--- a/tempest/services/volume/xml/volumes_client.py
+++ b/tempest/services/volume/xml/volumes_client.py
@@ -20,9 +20,9 @@
 from xml.sax import saxutils
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as common
 from tempest import config
 from tempest import exceptions
-from tempest.services.compute.xml import common
 
 CONF = config.CONF
 
diff --git a/tempest/tests/test_compute_xml_common.py b/tempest/tests/test_compute_xml_common.py
index bfa6a10..1561931 100644
--- a/tempest/tests/test_compute_xml_common.py
+++ b/tempest/tests/test_compute_xml_common.py
@@ -13,7 +13,7 @@
 #    under the License.
 from lxml import etree
 
-from tempest.services.compute.xml import common
+from tempest.common import xml_utils as common
 from tempest.tests import base
 
 
diff --git a/tempest/tests/test_rest_client.py b/tempest/tests/test_rest_client.py
index 0677aa0..b54b0c2 100644
--- a/tempest/tests/test_rest_client.py
+++ b/tempest/tests/test_rest_client.py
@@ -16,10 +16,10 @@
 import json
 
 from tempest.common import rest_client
+from tempest.common import xml_utils as xml
 from tempest import config
 from tempest import exceptions
 from tempest.openstack.common.fixture import mockpatch
-from tempest.services.compute.xml import common as xml
 from tempest.tests import base
 from tempest.tests import fake_auth_provider
 from tempest.tests import fake_config
diff --git a/tools/check_logs.py b/tools/check_logs.py
index e28c230..b5b1780 100755
--- a/tools/check_logs.py
+++ b/tools/check_logs.py
@@ -37,6 +37,7 @@
     'ceilometer-alarm-evaluator',
     'ceilometer-anotification',
     'ceilometer-api',
+    'ceilometer-collector',
     'c-vol',
     'g-api',
     'h-api',
@@ -90,7 +91,7 @@
                     break
             if not whitelisted or dump_all_errors:
                 if print_log_name:
-                    print("Log File Has Errors: %s" % name)
+                    print("\nLog File Has Errors: %s" % name)
                     print_log_name = False
                 if not whitelisted:
                     had_errors = True
