diff --git a/src/caosdb/connection/connection.py b/src/caosdb/connection/connection.py
index 33ea80021d401b58b7a31d732160368971826e00..1725e98099af52fe3332939c220981dc538176ff 100644
--- a/src/caosdb/connection/connection.py
+++ b/src/caosdb/connection/connection.py
@@ -30,7 +30,7 @@ try:
 except ImportError:
     from urllib import quote
     from urlparse import urlparse
-
+from errno import EPIPE as BrokenPipe
 from socket import error as SocketError
 import ssl
 import logging
@@ -147,7 +147,11 @@ class _DefaultCaosDBServerConnection(CaosDBServerConnection):
             If no url has been specified, or if the CA certificate cannot be
             loaded.
         """
-        context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+        if "ssl_version" in config and config["cacert"] is not None:
+            ssl_version = getattr(ssl, config["ssl_version"])
+        else:
+            ssl_version = ssl.PROTOCOL_TLSv1
+        context = ssl.SSLContext(ssl_version)
         context.verify_mode = ssl.CERT_REQUIRED
         if hasattr(context, "check_hostname"):
             context.check_hostname = True
@@ -469,6 +473,13 @@ class _Connection(object):  # pylint: disable=useless-object-inheritance
             return self._retry_http_request(method=method, path=path,
                                             headers=headers, body=body,
                                             **kwargs)
+        except SocketError as e:
+            if e.errno != BrokenPipe:
+                raise
+            return self._retry_http_request(method=method, path=path,
+                                            headers=headers, body=body,
+                                            reconnect=False,
+                                            **kwargs)
         except LoginFailedException:
             if kwargs.get("reconnect", True) is True:
                 self._login()
diff --git a/src/caosdb/connection/streaminghttp.py b/src/caosdb/connection/streaminghttp.py
index 85aa710a1ab3964735671513b61ebb6bc82745c8..01774301b9bdb55bdbf6b56695042aaf354dba97 100644
--- a/src/caosdb/connection/streaminghttp.py
+++ b/src/caosdb/connection/streaminghttp.py
@@ -72,13 +72,10 @@ class StreamingHTTPSConnection(client.HTTPSConnection, object):
 
     def __init__(self, socket_proxy=None, **kwargs):
         if socket_proxy is not None:
-            print("socket_proxy:" +  socket_proxy)
             host, port = socket_proxy.split(":")
             socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, host,
                                   int(port))
             socket.socket = socks.socksocket
-        else:
-            print("no socket_proxy")
         super(StreamingHTTPSConnection, self).__init__(**kwargs)
 
     def _send_output(self, body, **kwargs):
diff --git a/src/caosdb/utils/caosdb_admin.py b/src/caosdb/utils/caosdb_admin.py
index 24335d2b1d705f87181c5dc7f055abf2854f2b27..b3145390fc9de36da57fe3dd88996199f50a3ce7 100755
--- a/src/caosdb/utils/caosdb_admin.py
+++ b/src/caosdb/utils/caosdb_admin.py
@@ -35,9 +35,9 @@ from argparse import ArgumentParser
 from argparse import RawDescriptionHelpFormatter
 
 __all__ = []
-__version__ = 0.2
+__version__ = 0.3
 __date__ = '2016-09-19'
-__updated__ = '2017-08-30'
+__updated__ = '2018-12-11'
 
 
 def do_update_role(args):
@@ -98,7 +98,7 @@ def do_insert(args):
         reconnect=True,
         query_dict=fdict,
         body=xml)
-    db.Container._response_to_entities(ret)
+    print(db.Container._response_to_entities(ret))
 
 
 def _promt_for_pw():
@@ -217,6 +217,25 @@ def do_deny_role_permissions(args):
     admin._set_permissions(role=args.role_name, permission_rules=perms)
 
 
+def do_retrieve_entity_acl(args):
+    entities = db.execute_query(q=args.query, flags={"ACL": None})
+    for entity in entities:
+        print(entity.id)
+        print(entity.acl)
+
+
+def do_action_entity_permissions(args):
+    entities = db.execute_query(q=args.query, flags={"ACL": None})
+    for entity in entities:
+        for p in args.permissions:
+            getattr(entity, args.action)(role=args.role, priority=args.priority,
+                                         permission=p)
+    entities.update(flags={"ACL": None})
+    for entity in entities:
+        print(entity.id)
+        print(entity.acl)
+
+
 def main(argv=None):
     """Command line options."""
 
@@ -233,14 +252,8 @@ def main(argv=None):
     program_shortdesc = __import__('__main__').__doc__
     program_license = '''%s
 
-  Created by timm fitschen on %s.
-  Copyright 2016 BMPG. All rights reserved.
-
-  Distributed on an "AS IS" basis without warranties
-  or conditions of any kind, either express or implied.
-
 USAGE
-''' % (program_shortdesc, str(__date__))
+''' % (program_shortdesc)
 
     # Setup argument parser
     parser = ArgumentParser(description=program_license,
@@ -532,10 +545,38 @@ USAGE
         metavar="ROLENAME",
         help="The name of the existing role.")
 
+    # entity acl
+    retrieve_entity_acl_parser = subparsers.add_parser(
+        "retrieve_entity_acl", help="Retrieve an entity ACL.")
+    retrieve_entity_acl_parser.set_defaults(call=do_retrieve_entity_acl)
+    retrieve_entity_acl_parser.add_argument(dest="query", metavar="QUERY",
+                                            help="A FIND query.")
+
+    for action in ["grant", "deny", "revoke_denial", "revoke_grant"]:
+        action_entity_permissions_parser = subparsers.add_parser(
+            "{}_entity_permissions".format(action),
+            help="{} entity permissions to a role.".format(action))
+        action_entity_permissions_parser.set_defaults(
+            call=do_action_entity_permissions, action=action)
+        action_entity_permissions_parser.add_argument(dest="query", metavar="QUERY",
+                                                      help="A FIND query.")
+        action_entity_permissions_parser.add_argument(dest="role", metavar="ROLE",
+                                                      help="The name of an exising role.")
+        action_entity_permissions_parser.add_argument(
+            dest="permissions",
+            metavar="PERMISSION",
+            help="A list of permissions",
+            nargs='+')
+        action_entity_permissions_parser.add_argument(
+            '--priority',
+            dest="priority",
+            action="store_true",
+            default=False,
+            help="This flag enables priority permission rules.")
+
     # Process arguments
     args = parser.parse_args()
 
-
     db.configure_connection()._login()
 
     return args.call(args)