diff --git a/common/remote_client.py b/common/remote_client.py
index 3b48545..5365ceb 100644
--- a/common/remote_client.py
+++ b/common/remote_client.py
@@ -12,13 +12,14 @@
 
 import cStringIO
 import logging
-import paramiko
 import re
 import select
-import six
 import socket
 import time
 
+import paramiko
+import six
+
 from heat_integrationtests.common import exceptions
 
 LOG = logging.getLogger(__name__)
diff --git a/common/test.py b/common/test.py
index 57083fd..4c96567 100644
--- a/common/test.py
+++ b/common/test.py
@@ -10,19 +10,19 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import fixtures
 import logging
 import os
 import random
 import re
-import six
 import subprocess
-import testscenarios
-import testtools
 import time
 
+import fixtures
 from heatclient import exc as heat_exceptions
 from oslo.utils import timeutils
+import six
+import testscenarios
+import testtools
 
 from heat_integrationtests.common import clients
 from heat_integrationtests.common import config
diff --git a/functional/test_remote_stack.py b/functional/test_remote_stack.py
index d9eec79..1b6f961 100644
--- a/functional/test_remote_stack.py
+++ b/functional/test_remote_stack.py
@@ -11,10 +11,11 @@
 #    under the License.
 
 import logging
+
+from heatclient import exc
 import six
 
 from heat_integrationtests.common import test
-from heatclient import exc
 
 LOG = logging.getLogger(__name__)
 
diff --git a/functional/test_resource_group.py b/functional/test_resource_group.py
index 8ccddd8..dba6f5c 100644
--- a/functional/test_resource_group.py
+++ b/functional/test_resource_group.py
@@ -10,9 +10,11 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import six
+import json
 
 from heatclient import exc
+import six
+import yaml
 
 from heat_integrationtests.common import test
 
@@ -129,7 +131,7 @@
             return output_value
         # verify that the resources in resource group are identically
         # configured, resource names and outputs are appropriate.
-        stack_identifier = self.stack_create('create_stack', template=template)
+        stack_identifier = self.stack_create(template=template)
         self.assertEqual({u'random_group': u'OS::Heat::ResourceGroup'},
                          self.list_resources(stack_identifier))
 
@@ -145,7 +147,7 @@
 
     def test_update_increase_decrease_count(self):
         # create stack with resource group count 2
-        stack_identifier = self.stack_create('update_stack', template=template)
+        stack_identifier = self.stack_create(template=template)
         self.assertEqual({u'random_group': u'OS::Heat::ResourceGroup'},
                          self.list_resources(stack_identifier))
         # verify that the resource group has 2 resources
@@ -162,3 +164,74 @@
         self.update_stack(stack_identifier, update_template)
         # verify that the resource group has 3 resources
         self._validate_resources(stack_identifier, 3)
+
+
+class ResourceGroupAdoptTest(test.HeatIntegrationTest):
+    """Prove that we can do resource group adopt."""
+
+    main_template = '''
+heat_template_version: "2013-05-23"
+resources:
+  group1:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: 2
+      resource_def:
+        type: OS::Heat::RandomString
+outputs:
+  test0:
+    value: {get_attr: [group1, resource.0.value]}
+  test1:
+    value: {get_attr: [group1, resource.1.value]}
+'''
+
+    def setUp(self):
+        super(ResourceGroupAdoptTest, self).setUp()
+        self.client = self.orchestration_client
+
+    def _yaml_to_json(self, yaml_templ):
+        return yaml.load(yaml_templ)
+
+    def test_adopt(self):
+        data = {
+            "resources": {
+                "group1": {
+                    "status": "COMPLETE",
+                    "name": "group1",
+                    "resource_data": {},
+                    "metadata": {},
+                    "resource_id": "test-group1-id",
+                    "action": "CREATE",
+                    "type": "OS::Heat::ResourceGroup",
+                    "resources": {
+                        "0": {
+                            "status": "COMPLETE",
+                            "name": "0",
+                            "resource_data": {"value": "goopie"},
+                            "resource_id": "ID-0",
+                            "action": "CREATE",
+                            "type": "OS::Heat::RandomString",
+                            "metadata": {}
+                        },
+                        "1": {
+                            "status": "COMPLETE",
+                            "name": "1",
+                            "resource_data": {"value": "different"},
+                            "resource_id": "ID-1",
+                            "action": "CREATE",
+                            "type": "OS::Heat::RandomString",
+                            "metadata": {}
+                        }
+                    }
+                }
+            },
+            "environment": {"parameters": {}},
+            "template": yaml.load(self.main_template)
+        }
+        stack_identifier = self.stack_adopt(
+            adopt_data=json.dumps(data))
+
+        self.assert_resource_is_a_stack(stack_identifier, 'group1')
+        stack = self.client.stacks.get(stack_identifier)
+        self.assertEqual('goopie', self._stack_output(stack, 'test0'))
+        self.assertEqual('different', self._stack_output(stack, 'test1'))
diff --git a/functional/test_template_resource.py b/functional/test_template_resource.py
index 828ff74..6b3fabb 100644
--- a/functional/test_template_resource.py
+++ b/functional/test_template_resource.py
@@ -12,6 +12,7 @@
 
 import json
 import logging
+
 import yaml
 
 from heat_integrationtests.common import test
diff --git a/scenario/test_volumes.py b/scenario/test_volumes.py
index fe9ec03..841a091 100644
--- a/scenario/test_volumes.py
+++ b/scenario/test_volumes.py
@@ -11,10 +11,10 @@
 #    under the License.
 
 import logging
-import six
-from testtools import testcase
 
 from cinderclient import exceptions as cinder_exceptions
+import six
+from testtools import testcase
 
 from heat_integrationtests.common import exceptions
 from heat_integrationtests.common import test
