diff --git a/VERSION b/VERSION
index 0bee604..3f684d2 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.3.3
+2.3.4
diff --git a/pyvoltha/common/config/config_backend.py b/pyvoltha/common/config/config_backend.py
index d357fcf..31f6360 100644
--- a/pyvoltha/common/config/config_backend.py
+++ b/pyvoltha/common/config/config_backend.py
@@ -45,29 +45,22 @@
         self.host = host
         self.port = port
         self._path_prefix = path_prefix
-        self._cache = {}
         self.retries = 0
 
     def make_path(self, key):
         return '{}/{}'.format(self._path_prefix, key)
 
     def __getitem__(self, key):
-        if key in self._cache:
-            return self._cache[key]
         value = self._kv_get(self.make_path(key))
         if value is not None:
             # consul turns empty strings to None, so we do the reverse here
-            self._cache[key] = value['Value'] or ''
             return value['Value'] or ''
         else:
             raise KeyError(key)
 
     def __contains__(self, key):
-        if key in self._cache:
-            return True
         value = self._kv_get(self.make_path(key))
         if value is not None:
-            self._cache[key] = value['Value']
             return True
         else:
             return False
@@ -75,13 +68,11 @@
     def __setitem__(self, key, value):
         try:
             assert isinstance(value, six.string_types)
-            self._cache[key] = value
             self._kv_put(self.make_path(key), value)
         except Exception as e:
             self.log.exception('cannot-set-item', e=e)
 
     def __delitem__(self, key):
-        self._cache.pop(key, None)
         self._kv_delete(self.make_path(key))
 
     @inlineCallbacks
@@ -94,7 +85,6 @@
 
     def _redo_consul_connection(self):
         self._consul = Consul(host=self.host, port=self.port)
-        self._cache.clear()
 
     def _clear_backoff(self):
         if self.retries:
@@ -166,28 +156,21 @@
         self.host = host
         self.port = port
         self._path_prefix = path_prefix
-        self._cache = {}
         self.retries = 0
 
     def make_path(self, key):
         return '{}/{}'.format(self._path_prefix, key)
 
     def __getitem__(self, key):
-        if key in self._cache:
-            return self._cache[key]
         (value, meta) = self._kv_get(self.make_path(key))
         if value is not None:
-            self._cache[key] = value
             return value
         else:
             raise KeyError(key)
 
     def __contains__(self, key):
-        if key in self._cache:
-            return True
         (value, meta) = self._kv_get(self.make_path(key))
         if value is not None:
-            self._cache[key] = value
             return True
         else:
             return False
@@ -195,13 +178,11 @@
     def __setitem__(self, key, value):
         try:
             assert isinstance(value, six.string_types)
-            self._cache[key] = value
             self._kv_put(self.make_path(key), value)
         except Exception as e:
             self.log.exception('cannot-set-item', e=e)
 
     def __delitem__(self, key):
-        self._cache.pop(key, None)
         self._kv_delete(self.make_path(key))
 
     @inlineCallbacks
@@ -214,7 +195,6 @@
 
     def _redo_etcd_connection(self):
         self._etcd = etcd3.client(host=self.host, port=self.port)
-        self._cache.clear()
 
     def _clear_backoff(self):
         if self.retries:
diff --git a/requirements.txt b/requirements.txt
index d29f34d..c9d8f03 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -18,4 +18,4 @@
 structlog==19.2.0
 transitions==0.6.4
 txaioetcd==0.3.0
-voltha-protos==2.1.1
+voltha-protos==2.1.2
