diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index ecd1e2a..8e7d8fb 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -33,6 +33,12 @@
 # are known.
 allow_tenant_isolation = true
 
+# Allows test cases to create/destroy tenants and users. This option
+# enables isolated test cases and better parallel execution,
+# but also requires that OpenStack Identity API admin credentials
+# are known.
+allow_tenant_reuse = true
+
 # This should be the username of a user WITHOUT administrative privileges
 username = demo
 # The above non-administrative user's password
diff --git a/etc/tempest.conf.tpl b/etc/tempest.conf.tpl
index f268de2..ac1664a 100644
--- a/etc/tempest.conf.tpl
+++ b/etc/tempest.conf.tpl
@@ -29,6 +29,12 @@
 # are known.
 allow_tenant_isolation = %COMPUTE_ALLOW_TENANT_ISOLATION%
 
+# Allows test cases to create/destroy tenants and users. This option
+# enables isolated test cases and better parallel execution,
+# but also requires that OpenStack Identity API admin credentials
+# are known.
+allow_tenant_reuse = %COMPUTE_ALLOW_TENANT_REUSE%
+
 # This should be the username of a user WITHOUT administrative privileges
 username = %USERNAME%
 # The above non-administrative user's password
diff --git a/tempest/config.py b/tempest/config.py
index 28a0c5e..003f03e 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -125,6 +125,17 @@
         return self.get("allow_tenant_isolation", 'false').lower() != 'false'
 
     @property
+    def allow_tenant_reuse(self):
+        """
+        If allow_tenant_isolation is True and a tenant that would be created
+        for a given test already exists (such as from a previously-failed run),
+        re-use that tenant instead of failing because of the conflict. Note
+        that this would result in the tenant being deleted at the end of a
+        subsequent successful run.
+        """
+        return self.get("allow_tenant_reuse", 'true').lower() != 'false'
+
+    @property
     def username(self):
         """Username to use for Nova API requests."""
         return self.get("username", "demo")
diff --git a/tempest/services/identity/json/admin_client.py b/tempest/services/identity/json/admin_client.py
index 89a068e..cb9c10b 100644
--- a/tempest/services/identity/json/admin_client.py
+++ b/tempest/services/identity/json/admin_client.py
@@ -101,6 +101,13 @@
         body = json.loads(body)
         return resp, body['tenants']
 
+    def get_tenant_by_name(self, tenant_name):
+        resp, tenants = self.list_tenants()
+        for tenant in tenants:
+            if tenant['name'] == tenant_name:
+                return tenant
+        raise exceptions.NotFound('No such tenant')
+
     def update_tenant(self, tenant_id, **kwargs):
         """Updates a tenant"""
         resp, body = self.get_tenant(tenant_id)
@@ -165,6 +172,13 @@
         body = json.loads(body)
         return resp, body['users']
 
+    def get_user_by_username(self, tenant_id, username):
+        resp, users = self.list_users_for_tenant(tenant_id)
+        for user in users:
+            if user['name'] == username:
+                return user
+        raise exceptions.NotFound('No such user')
+
     def create_service(self, name, type, **kwargs):
         """Create a service"""
         post_body = {
diff --git a/tempest/tests/compute/base.py b/tempest/tests/compute/base.py
index ba4f518..5e6eb7d 100644
--- a/tempest/tests/compute/base.py
+++ b/tempest/tests/compute/base.py
@@ -101,12 +101,37 @@
         tenant_desc = tenant_name + "-desc"
         password = "pass"
 
-        resp, tenant = admin_client.create_tenant(name=tenant_name,
-                                                  description=tenant_desc)
-        resp, user = admin_client.create_user(username,
-                                              password,
-                                              tenant['id'],
-                                              email)
+        try:
+            resp, tenant = admin_client.create_tenant(name=tenant_name,
+                                                      description=tenant_desc)
+        except exceptions.Duplicate:
+            if cls.config.compute.allow_tenant_reuse:
+                tenant = admin_client.get_tenant_by_name(tenant_name)
+                LOG.info('Re-using existing tenant %s' % tenant)
+            else:
+                msg = ('Unable to create isolated tenant %s because ' +
+                       'it already exists. If this is related to a ' +
+                       'previous test failure, try using ' +
+                       'allow_tentant_reuse in tempest.conf') % tenant_name
+                raise exceptions.Duplicate(msg)
+
+        try:
+            resp, user = admin_client.create_user(username,
+                                                  password,
+                                                  tenant['id'],
+                                                  email)
+        except exceptions.Duplicate:
+            if cls.config.compute.allow_tenant_reuse:
+                user = admin_client.get_user_by_username(tenant['id'],
+                                                         username)
+                LOG.info('Re-using existing user %s' % user)
+            else:
+                msg = ('Unable to create isolated tenant %s because ' +
+                       'it already exists. If this is related to a ' +
+                       'previous test failure, try using ' +
+                       'allow_tentant_reuse in tempest.conf') % tenant_name
+                raise exceptions.Duplicate(msg)
+
         # Store the complete creds (including UUID ids...) for later
         # but return just the username, tenant_name, password tuple
         # that the various clients will use.
