diff --git a/djaosdb/caosdb_client.py b/djaosdb/caosdb_client.py
index 021ad7d2fbff2cc7a6c37391d0d149f99998b61a..789ce2170effacf158c16069dd262b172196b493 100644
--- a/djaosdb/caosdb_client.py
+++ b/djaosdb/caosdb_client.py
@@ -112,6 +112,9 @@ class CachedProperties(set):
 
 class DefaultCaosDBClientDelegate:
 
+    _query_cache = {}
+    _etag = None
+
     def __init__(self, **kwargs):
         self.cached_record_types = CachedRecordTypes(self)
         self.cached_properties = CachedProperties(self)
@@ -121,8 +124,7 @@ class DefaultCaosDBClientDelegate:
             self._caosdb = caosdb
 
         self._caosdb.configure_connection(**kwargs)
-        self._query_cache = {}
-        self._etag = None
+
 
     def _get_reference_clause(self, type, p, v, negation, sub=None):
         result = (f" REFERENCES {v}"
@@ -165,26 +167,32 @@ class DefaultCaosDBClientDelegate:
         raise NotImplementedError("_get_filter_clause(%s)", fil)
 
     def _cache_locally(self, etag, key, value):
-        if etag != self._etag:
-            self._query_cache = {}
+        if etag != DefaultCaosDBClientDelegate._etag:
+            DefaultCaosDBClientDelegate._query_cache = {}
+            DefaultCaosDBClientDelegate._etag = etag
         if key is not None:
-            self._query_cache[key] = value
+            LOGGER.debug("caching results with etag '%s' for key '%s'",
+                         str(etag), str(key))
+            DefaultCaosDBClientDelegate._query_cache[key] = value
 
     def _query(self, query, key=None):
-        if key is not None and key in self.query_local_cache:
-            return self._query_cache[key]
+        if key is not None and key in DefaultCaosDBClientDelegate._query_cache:
+            LOGGER.debug("using cached results for key '%s'", str(key))
+            return DefaultCaosDBClientDelegate._query_cache[key]
 
-        result = self._query_no_local_cache(query)
+        result, etag = self._query_no_local_cache(query)
         self._cache_locally(etag, key, result)
 
         return result
 
     def _query_no_local_cache(self, query):
         t1 = time.time()
-        result = self._caosdb.execute_query(query)
+        query = self._caosdb.Query(q=query)
+        result = query.execute()
+        etag = query.etag
         t2 = time.time()
         LOGGER.debug("[%s] execute_query(%s) - %s", str(t1), query, str(t2 - t1))
-        return result
+        return result, etag
 
     def _find(self, record_type, *args, **kwargs):
         filter_clause = ""