diff --git a/_modules/cinderv3/common.py b/_modules/cinderv3/common.py
index a7e6220..08447fb 100644
--- a/_modules/cinderv3/common.py
+++ b/_modules/cinderv3/common.py
@@ -1,6 +1,7 @@
 import six
 import logging
 import uuid
+import time
 
 import os_client_config
 from salt import exceptions
@@ -33,6 +34,8 @@
         @six.wraps(func)
         def wrapped_f(*args, **kwargs):
             cloud_name = kwargs.pop('cloud_name', None)
+            connect_retries = 30
+            connect_retry_delay = 1
             if not cloud_name:
                 raise exceptions.SaltInvocationError(
                     "No cloud_name specified. Please provide cloud_name "
@@ -43,17 +46,29 @@
                 if k.startswith('__'):
                     kwargs.pop(k)
             url, request_kwargs = func(*args, **kwargs)
+            response = None
+            for i in range(connect_retries):
+                try:
+                  response = getattr(adapter, method.lower())(
+                      url, connect_retries=connect_retries,
+                      **request_kwargs)
+                except Exception as e:
+                    if hasattr(e, 'http_status') and (e.http_status >= 500
+                        or e.http_status == 0):
+                        msg = ("Got retriable exception when contacting "
+                               "Cinder API. Sleeping for %ss. Attepmpts "
+                               "%s of %s")
+                        log.error(msg % (connect_retry_delay, i, connect_retries))
+                        time.sleep(connect_retry_delay)
+                        continue
+                break
+            if not response or not response.content:
+                return {}
             try:
-                response = getattr(adapter, method.lower())(url,
-                                                            **request_kwargs)
-            except Exception as e:
-                log.exception("Error occured when executing request")
-                return {"result": False,
-                        "comment": str(e),
-                        "status_code": getattr(e, "http_status", 500)}
-            return {"result": True,
-                    "body": response.json() if response.content else {},
-                    "status_code": response.status_code}
+                resp = response.json()
+            except ValueError:
+                resp = response.content
+            return resp
         return wrapped_f
     return wrap
 
@@ -81,12 +96,12 @@
             else:
                 cloud_name = kwargs['cloud_name']
                 # seems no filtering on volume type name in cinder
-                resp = resource_list(cloud_name=cloud_name)["body"][resp_key]
+                resp = resource_list(cloud_name=cloud_name)[resp_key]
                 # so need to search in list directly
                 for item in resp:
                     if item["name"] == ref:
                         if item_id is not None:
-                            msg = ("Multiple resource: {resource} " 
+                            msg = ("Multiple resource: {resource} "
                                    "with name: {name} found ").format(
                                     resource=resp_key, name=ref)
                             return {"result": False,
diff --git a/_modules/cinderv3/volume.py b/_modules/cinderv3/volume.py
index deaaf6d..876416e 100644
--- a/_modules/cinderv3/volume.py
+++ b/_modules/cinderv3/volume.py
@@ -83,7 +83,7 @@
         keys = {}
     cloud_name = kwargs["cloud_name"]
     cur_keys = keys_volume_type_get(
-        volume_type_id, cloud_name=cloud_name)["body"]["extra_specs"]
+        volume_type_id, cloud_name=cloud_name)["extra_specs"]
 
     for k, v in keys.items():
         if (k, v) in cur_keys.items():
diff --git a/cinder/client.sls b/cinder/client.sls
index edfec18..233f31f 100644
--- a/cinder/client.sls
+++ b/cinder/client.sls
@@ -37,31 +37,31 @@
 {%- for backend_name, backend in client.get('backend', {}).items() %}
 
 cinder_type_create_{{ backend_name }}:
-  cinderng.volume_type_present:
+  cinderv3.volume_type_present:
   - name: {{ backend.type_name }}
-  - profile: {{ credentials }}
+  - cloud_name: admin_identity
   - require:
     - pkg: cinder_client_packages
 
 cinder_type_update_{{ backend_name }}:
-  cinderng.volume_type_key_present:
+  cinderv3.volume_type_key_present:
   - name: {{ backend.type_name }}
   - key: volume_backend_name
   - value: {{ backend_name }}
-  - profile: {{ credentials }}
+  - cloud_name: admin_identity
   - require:
-    - cinderng: cinder_type_create_{{ backend_name }}
+    - cinderv3: cinder_type_create_{{ backend_name }}
 
 {%- for key_name, key_value in backend.get('key', {}).items() %}
 
 cinder_type_update_{{ backend_name }}_{{ key_name }}:
-  cinderng.volume_type_key_present:
+  cinderv3.volume_type_key_present:
   - name: {{ backend.type_name }}
   - key: {{ key_name }}
   - value: {{ key_value }}
-  - profile: {{ credentials }}
+  - cloud_name: admin_identity
   - require:
-    - cinderng: cinder_type_create_{{ backend_name }}
+    - cinderv3: cinder_type_create_{{ backend_name }}
 
 {%- endfor %}
 
diff --git a/cinder/controller.sls b/cinder/controller.sls
index ac31298..b09246a 100644
--- a/cinder/controller.sls
+++ b/cinder/controller.sls
@@ -357,9 +357,9 @@
 {%- endif %}
 
 cinder_type_create_{{ backend_name }}:
-  cinderng.volume_type_present:
+  cinderv3.volume_type_present:
   - name: {{ backend.type_name }}
-  - profile: {{ credentials }}
+  - cloud_name: admin_identity
   {%- if controller.get('role', 'primary') == 'secondary' %}
   - onlyif: /bin/false
   {%- endif %}
@@ -367,16 +367,16 @@
     - service: cinder_controller_services
 
 cinder_type_update_{{ backend_name }}:
-  cinderng.volume_type_key_present:
+  cinderv3.volume_type_key_present:
   - name: {{ backend.type_name }}
   - key: volume_backend_name
   - value: {{ backend_name }}
-  - profile: {{ credentials }}
+  - cloud_name: admin_identity
   {%- if controller.get('role', 'primary') == 'secondary' %}
   - onlyif: /bin/false
   {%- endif %}
   - require:
-    - cinderng: cinder_type_create_{{ backend_name }}
+    - cinderv3: cinder_type_create_{{ backend_name }}
 
 {%- endfor %}
 
