diff --git a/_modules/cinderng.py b/_modules/cinderng.py
index d97c5cd..aaed6fd 100644
--- a/_modules/cinderng.py
+++ b/_modules/cinderng.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 import logging
 import time
+import functools
 
 LOG = logging.getLogger(__name__)
 
@@ -47,20 +48,19 @@
     return credentials
 
 def retries(func):
+    @functools.wraps(func)
     def func_wrapper(*args, **kwargs):
         retries = kwargs.get('retries', 5)
         timeout = kwargs.get('timeout', 5)
         res = None
         for i in range(retries):
             try:
-                res = func(*args, **kwargs)
+                return func(*args, **kwargs)
             except Exception as e:
                 if i == retries - 1:
                     raise e
-                    time.sleep(timeout)
                 else:
-                    break
-        return res
+                    time.sleep(timeout)
     return func_wrapper
 
 def create_conn(cred=None):
diff --git a/cinder/files/queens/cinder.conf.controller.Debian b/cinder/files/queens/cinder.conf.controller.Debian
index 5aa41f3..2cad9f7 100644
--- a/cinder/files/queens/cinder.conf.controller.Debian
+++ b/cinder/files/queens/cinder.conf.controller.Debian
@@ -3247,8 +3247,19 @@
 {%- set _data = controller.identity %}
 [barbican]
 {%- include "oslo_templates/files/queens/castellan/_barbican.conf" %}
+{%- endif %}
+
 
 [key_manager]
+{%- if controller.get('key_manager', {}).backend is defined %}
+    {%- set key_backend = controller.key_manager.backend %}
+{%- elif controller.get('barbican', {}).get('enabled', False) %}
+    {%- set key_backend = 'barbican' %}
+{%- endif %}
+
+{%- set _data = {} %}
+{%- do _data.update(controller.identity) %}
+{%- do _data.update(controller.get('barbican', {})) %}
 #
 # From castellan.config
 #
@@ -3257,10 +3268,11 @@
 # Default is  "barbican". Will support the  values earlier set using
 # [key_manager]/api_class for some time. (string value)
 # Deprecated group/name - [key_manager]/api_class
-backend = {{ _data.backend }}
-
-{%- include "oslo_templates/files/queens/keystoneauth/_type_"+ _data.get('auth_type','password') +".conf" %}
+#backend = barbican
+{%- if key_backend is defined %}
+backend = {{ key_backend }}
 {%- endif %}
+{%- include "oslo_templates/files/queens/keystoneauth/_type_"+ _data.get('auth_type','password') +".conf" %}
 
 [keystone_authtoken]
 {%- set _data = controller.get('identity', {}) %}
diff --git a/cinder/files/queens/cinder.conf.volume.Debian b/cinder/files/queens/cinder.conf.volume.Debian
index 4602e7e..b6c644b 100644
--- a/cinder/files/queens/cinder.conf.volume.Debian
+++ b/cinder/files/queens/cinder.conf.volume.Debian
@@ -3246,9 +3246,20 @@
 {%- if volume.get('barbican', {}).get('enabled', False) %}
 {%- set _data = volume.identity %}
 [barbican]
-{%- include "oslo_templates/files/castellan/_barbican.conf" %}
+{%- include "oslo_templates/files/queens/castellan/_barbican.conf" %}
+{%- endif %}
+
 
 [key_manager]
+{%- if volume.get('key_manager', {}).backend is defined %}
+    {%- set key_backend = volume.key_manager.backend %}
+{%- elif volume.get('barbican', {}).get('enabled', False) %}
+    {%- set key_backend = 'barbican' %}
+{%- endif %}
+
+{%- set _data = {} %}
+{%- do _data.update(volume.identity) %}
+{%- do _data.update(volume.get('barbican', {})) %}
 #
 # From castellan.config
 #
@@ -3257,10 +3268,12 @@
 # Default is  "barbican". Will support the  values earlier set using
 # [key_manager]/api_class for some time. (string value)
 # Deprecated group/name - [key_manager]/api_class
-backend = {{ _data.backend }}
-
-{%- include "oslo_templates/files/queens/keystoneauth/_type_"+ _data.get('auth_type','password') +".conf" %}
+#backend = barbican
+{%- if key_backend is defined %}
+backend = {{ key_backend }}
 {%- endif %}
+{%- include "oslo_templates/files/queens/keystoneauth/_type_"+ _data.get('auth_type','password') +".conf" %}
+
 
 [keystone_authtoken]
 {%- set _data = volume.get('identity', {}) %}
