diff --git a/_modules/cinderv3/arg_converter.py b/_modules/cinderv3/arg_converter.py
index 3a57f8b..90445fd 100644
--- a/_modules/cinderv3/arg_converter.py
+++ b/_modules/cinderv3/arg_converter.py
@@ -11,10 +11,10 @@
             return False
 
 
-def named_checker(resource, ref, cloud_name):
+def named_checker(resource, ref, cloud_name, **kwargs):
     resp_key = response_keys[resource]
     resp = resource_lists[resource](
-        name=ref, cloud_name=cloud_name)[resp_key]
+        name=ref, cloud_name=cloud_name, **kwargs)[resp_key]
     if len(resp) == 0:
         raise common.ResourceNotFound(resp_key, ref)
     elif len(resp) > 1:
@@ -22,10 +22,11 @@
     return resp[0]['id']
 
 
-def nameless_checker(resource, ref, cloud_name):
+def nameless_checker(resource, ref, cloud_name, **kwargs):
     item_id = None
     resp_key = response_keys[resource]
-    resp = resource_lists[resource](cloud_name=cloud_name)[resp_key]
+    resp = resource_lists[resource](
+        cloud_name=cloud_name, **kwargs)[resp_key]
     for item in resp:
         if item["name"] == ref:
             if item_id is not None:
@@ -60,6 +61,7 @@
         def wrapped_f(*args, **kwargs):
             results = []
             args_start = 0
+            connection_params = kwargs.pop('connection_params', {}) or {}
             for index, (resource, arg_name) in enumerate(
                     resource_arg_name_pairs):
                 if arg_name in kwargs:
@@ -73,9 +75,10 @@
                     results.append(ref)
                 else:
                     # Then we have name not uuid
-                    res = name_checkers[resource](resource, ref, cloud_name)
+                    res = name_checkers[resource](resource, ref, cloud_name,
+                                                  connection_params=connection_params)
                     results.append(res)
                 results.extend(args[args_start:])
             return func(*results, **kwargs)
         return wrapped_f
-    return wrap
\ No newline at end of file
+    return wrap
diff --git a/_modules/cinderv3/common.py b/_modules/cinderv3/common.py
index bc77cd9..df419e9 100644
--- a/_modules/cinderv3/common.py
+++ b/_modules/cinderv3/common.py
@@ -65,9 +65,11 @@
 def send(method):
     def wrap(func):
         def wrapped_f(*args, **kwargs):
-            connect_retries = 30
-            connect_retry_delay = 1
             cloud_name = kwargs.pop('cloud_name')
+            connection_params = kwargs.pop('connection_params', {}) or {}
+            connect_retries = connection_params.get('connect_retries', 60)
+            connect_retry_delay = connection_params.get('connect_retry_delay',
+                                                        1)
             if not cloud_name:
                 e = NoCredentials()
                 log.error('%s' % e)
