diff --git a/novaclient/tests/unit/v2/fakes.py b/novaclient/tests/unit/v2/fakes.py
index f3052252e..77cc93b50 100644
--- a/novaclient/tests/unit/v2/fakes.py
+++ b/novaclient/tests/unit/v2/fakes.py
@@ -74,6 +74,8 @@ class FakeHTTPClient(base_client.HTTPClient):
             munged_url = munged_url.replace('.', '_')
             munged_url = munged_url.replace('-', '_')
             munged_url = munged_url.replace(' ', '_')
+            munged_url = munged_url.replace('!', '_')
+            munged_url = munged_url.replace('@', '_')
             callback = "%s_%s" % (method.lower(), munged_url)
 
         if url is None or callback == "get_http:__nova_api:8774":
@@ -1776,6 +1778,48 @@ class FakeHTTPClient(base_client.HTTPClient):
                 'disk_available_least': 200}
         })
 
+    def get_os_hypervisors_hyper1(self, **kw):
+        return (200, {}, {
+            'hypervisor':
+            {'id': 1234,
+             'service': {'id': 1, 'host': 'compute1'},
+             'vcpus': 4,
+             'memory_mb': 10 * 1024,
+             'local_gb': 250,
+             'vcpus_used': 2,
+             'memory_mb_used': 5 * 1024,
+             'local_gb_used': 125,
+             'hypervisor_type': "xen",
+             'hypervisor_version': 3,
+             'hypervisor_hostname': "hyper1",
+             'free_ram_mb': 5 * 1024,
+             'free_disk_gb': 125,
+             'current_workload': 2,
+             'running_vms': 2,
+             'cpu_info': 'cpu_info',
+             'disk_available_least': 100}})
+
+    def get_os_hypervisors_region_child_1(self, **kw):
+        return (200, {}, {
+            'hypervisor':
+            {'id': 'region!child@1',
+             'service': {'id': 1, 'host': 'compute1'},
+             'vcpus': 4,
+             'memory_mb': 10 * 1024,
+             'local_gb': 250,
+             'vcpus_used': 2,
+             'memory_mb_used': 5 * 1024,
+             'local_gb_used': 125,
+             'hypervisor_type': "xen",
+             'hypervisor_version': 3,
+             'hypervisor_hostname': "hyper1",
+             'free_ram_mb': 5 * 1024,
+             'free_disk_gb': 125,
+             'current_workload': 2,
+             'running_vms': 2,
+             'cpu_info': 'cpu_info',
+             'disk_available_least': 100}})
+
     def get_os_hypervisors_hyper_search(self, **kw):
         return (200, {}, {
             'hypervisors': [
@@ -1828,6 +1872,12 @@ class FakeHTTPClient(base_client.HTTPClient):
                            'hypervisor_hostname': "hyper1",
                            'uptime': "fake uptime"}})
 
+    def get_os_hypervisors_region_child_1_uptime(self, **kw):
+        return (200, {}, {
+            'hypervisor': {'id': 'region!child@1',
+                           'hypervisor_hostname': "hyper1",
+                           'uptime': "fake uptime"}})
+
     def get_os_networks(self, **kw):
         return (200, {}, {'networks': [{"label": "1", "cidr": "10.0.0.0/24",
                                         'project_id':
diff --git a/novaclient/tests/unit/v2/test_shell.py b/novaclient/tests/unit/v2/test_shell.py
index e5d8914a5..cc3ef7478 100644
--- a/novaclient/tests/unit/v2/test_shell.py
+++ b/novaclient/tests/unit/v2/test_shell.py
@@ -1727,14 +1727,22 @@ class ShellTest(utils.TestCase):
         self.run_command('hypervisor-show 1234')
         self.assert_called('GET', '/os-hypervisors/1234')
 
+    def test_hypervisor_list_show_by_cell_id(self):
+        self.run_command('hypervisor-show region!child@1')
+        self.assert_called('GET', '/os-hypervisors/region!child@1')
+
     def test_hypervisor_show_by_name(self):
         self.run_command('hypervisor-show hyper1')
-        self.assert_called('GET', '/os-hypervisors/detail')
+        self.assert_called('GET', '/os-hypervisors/hyper1')
 
     def test_hypervisor_uptime_by_id(self):
         self.run_command('hypervisor-uptime 1234')
         self.assert_called('GET', '/os-hypervisors/1234/uptime')
 
+    def test_hypervisor_uptime_by_cell_id(self):
+        self.run_command('hypervisor-uptime region!child@1')
+        self.assert_called('GET', '/os-hypervisors/region!child@1/uptime')
+
     def test_hypervisor_uptime_by_name(self):
         self.run_command('hypervisor-uptime hyper1')
         self.assert_called('GET', '/os-hypervisors/1234/uptime')
diff --git a/novaclient/utils.py b/novaclient/utils.py
index 1f4df7a57..5abb122e7 100644
--- a/novaclient/utils.py
+++ b/novaclient/utils.py
@@ -184,7 +184,8 @@ def print_dict(d, dict_property="Property", dict_value="Value", wrap=0):
 
 def find_resource(manager, name_or_id, **find_args):
     """Helper for the _find_* methods."""
-    # for str id which is not uuid (for Flavor and Keypair search currently)
+    # for str id which is not uuid (for Flavor, Keypair and hypervsior in cells
+    # environments search currently)
     if getattr(manager, 'is_alphanum_id_allowed', False):
         try:
             return manager.get(name_or_id)
diff --git a/novaclient/v2/hypervisors.py b/novaclient/v2/hypervisors.py
index b1bfcb4b9..684a7fb34 100644
--- a/novaclient/v2/hypervisors.py
+++ b/novaclient/v2/hypervisors.py
@@ -31,6 +31,7 @@ class Hypervisor(base.Resource):
 
 class HypervisorManager(base.ManagerWithFind):
     resource_class = Hypervisor
+    is_alphanum_id_allowed = True
 
     def list(self, detailed=True):
         """