diff --git a/_modules/barbicanv1/common.py b/_modules/barbicanv1/common.py
index df18df9..80d927f 100644
--- a/_modules/barbicanv1/common.py
+++ b/_modules/barbicanv1/common.py
@@ -1,4 +1,6 @@
+import functools
 import logging
+import time
 from uuid import UUID
 
 
@@ -82,8 +84,11 @@
 
 def send(method):
     def wrap(func):
+        @functools.wraps(func)
         def wrapped_f(*args, **kwargs):
             cloud_name = kwargs.pop('cloud_name')
+            connect_retries =  30
+            connect_retry_delay = 1
             if not cloud_name:
                 e = NoCredentials()
                 log.error('%s' % e)
@@ -95,12 +100,27 @@
                 if k.startswith('__'):
                     kwargs.pop(k)
             url, request_kwargs = func(*args, **kwargs)
-            response = getattr(adapter, method)(url, **request_kwargs)
-            if not response.content:
+            response = None
+            for i in range(connect_retries):
+                try:
+                  response = getattr(adapter, method)(
+                      url, connect_retries=connect_retries,
+                      **request_kwargs)
+                except Exception as e:
+                    if not hasattr(e, 'http_status') or (e.http_status >= 500
+                        or e.http_status == 0):
+                        msg = ("Got retriable exception when contacting "
+                               "Barbican 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:
                 resp = response.json()
-            except:
+            except ValueError:
                 resp = response.content
             return resp
         return wrapped_f
@@ -131,9 +151,15 @@
             if _check_uuid(ref):
                 uuid = ref
             else:
+                retries = 30
+                while retries:
                 # Then we have name not uuid
-                resp = resource_list(
-                    name=ref, cloud_name=cloud_name)[resp_key]
+                    resp = resource_list(
+                        name=ref, cloud_name=cloud_name).get(resp_key)
+                    if resp is not None:
+                        break
+                    retries -= 1
+                    time.sleep(1)
                 if len(resp) == 0:
                     raise ResourceNotFound(resp_key, ref)
                 elif len(resp) > 1:
