diff --git a/examples/server_side_script.py b/examples/server_side_script.py
new file mode 100755
index 0000000000000000000000000000000000000000..71bd9c05b4e86133cc356e1c15359701642a9486
--- /dev/null
+++ b/examples/server_side_script.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# ** header v3.0
+# This file is a part of the CaosDB Project.
+#
+# Copyright (C) 2018 Research Group Biomedical Physics,
+# Max-Planck-Institute for Dynamics and Self-Organization Göttingen
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+# ** end header
+#
+"""server_side_script.py.
+
+An example which implements a minimal server-side script.
+
+1) This script expects to find a *.txt file in the .upload_files dir which is
+printed to stdout.
+
+2) It executes a "Count stars" query and prints the result to stdout.
+
+3) It will return with code 0 if everything is ok, or with any code that is
+specified with the commandline option --exit
+"""
+
+import sys
+from os import listdir
+from caosdb import configure_connection, execute_query
+
+
+# parse --auth-token option and configure connection
+CODE = 0
+QUERY = "COUNT stars"
+for arg in sys.argv:
+    if arg.startswith("--auth-token="):
+        auth_token = arg[13:]
+        configure_connection(auth_token=auth_token)
+    if arg.startswith("--exit="):
+        CODE = int(arg[7:])
+    if arg.startswith("--query="):
+        QUERY = arg[8:]
+
+
+############################################################
+# 1 # find and print *.txt file ############################
+############################################################
+
+try:
+    for fname in listdir(".upload_files"):
+        if fname.endswith(".txt"):
+            with open(".upload_files/{}".format(fname)) as f:
+                print(f.read())
+except FileNotFoundError:
+    pass
+
+
+############################################################
+# 2 # query "COUNT stars" ##################################
+############################################################
+
+RESULT = execute_query(QUERY)
+print(RESULT)
+
+############################################################
+# 3 ########################################################
+############################################################
+
+sys.exit(CODE)
diff --git a/src/caosdb/common/models.py b/src/caosdb/common/models.py
index 8c32b94877d38b52caeed722c4b9821033f82cdf..e07f97134035b79b66f1bfb9c33ee3b6d33ac97d 100644
--- a/src/caosdb/common/models.py
+++ b/src/caosdb/common/models.py
@@ -2129,6 +2129,8 @@ class Container(list):
         corresponding entity e2 from C2 via e1._sync(c2). 2)  Add any
         leftover entity from C2 to C1.
         """
+        # TODO: This method is extremely slow. E.g. 30 seconds for 1000
+        # entities.
 
         sync_dict = self._calc_sync_dict(
             remote_container=container,
diff --git a/src/caosdb/connection/connection.py b/src/caosdb/connection/connection.py
index 9c35e7cf5997854dfff97e7de8822461e5708d89..10674e71fc1ae6a1d3a85e871d484593f58fd879 100644
--- a/src/caosdb/connection/connection.py
+++ b/src/caosdb/connection/connection.py
@@ -67,6 +67,9 @@ class _WrappedHTTPResponse(CaosDBHTTPResponse):
     def getheaders(self):
         return self.response.getheaders()
 
+    def close(self):
+        self.response.close()
+
 
 class _DefaultCaosDBServerConnection(CaosDBServerConnection):
     def __init__(self):
diff --git a/src/caosdb/connection/interface.py b/src/caosdb/connection/interface.py
index 1e0c7adb4b1c85862c3e3c385acfef6feca05cb2..58acf60985c9e318d1642301660bf7de8e984715 100644
--- a/src/caosdb/connection/interface.py
+++ b/src/caosdb/connection/interface.py
@@ -57,6 +57,20 @@ class CaosDBHTTPResponse(ABC):
     def getheaders(self):
         """Return all headers."""
 
+    def __enter__(self):
+        pass
+
+    def __exit__(self, type, value, traceback):
+        self.close()
+
+    @abstractmethod
+    def close(self):
+        """close.
+
+        Close this response. Depending on the implementation this might also
+        close underlying streams, sockets etc.
+        """
+
 
 class CaosDBServerConnection(ABC):
     """Abstract class which defines the interface for sending requests to the
diff --git a/src/caosdb/connection/mockup.py b/src/caosdb/connection/mockup.py
index ed9a25eaecb0802fb85b4a5dfc47b9867c18faca..abde5d03da4d553b523c3ecc63ff7552696cc865 100644
--- a/src/caosdb/connection/mockup.py
+++ b/src/caosdb/connection/mockup.py
@@ -66,6 +66,9 @@ class MockUpResponse(CaosDBHTTPResponse):
     def getheaders(self):
         return self.headers
 
+    def close(self):
+        pass
+
 
 class MockUpServerConnection(CaosDBServerConnection):
     """The mock-up connection which does not actually connect to anything but
diff --git a/src/caosdb/connection/streaminghttp.py b/src/caosdb/connection/streaminghttp.py
index dc8d4fffd1635da7474aaa7186ff8ec5d6d0069b..fa97a964149ff1630bb3bbb3fd1cccf8029f8d6b 100644
--- a/src/caosdb/connection/streaminghttp.py
+++ b/src/caosdb/connection/streaminghttp.py
@@ -137,7 +137,7 @@ class StreamingHTTPSConnection(client.HTTPSConnection, object):
                 if self.debuglevel > 0:
                     print("sendIng a byte-like")
                 self.sock.sendall(value)
-        except socket.error:
-            if socket.error[0] == 32:      # Broken pipe
+        except socket.error as err:
+            if err.args[0] == 32:      # Broken pipe
                 self.close()
             raise