Index: vendor/trac/trac/config.py
===================================================================
--- vendor/trac/trac/config.py	(revision 8345)
+++ vendor/trac/trac/config.py	(working copy)
@@ -49,6 +50,7 @@
         self._lastmtime = 0
         self._sections = {}
         self.parse_if_needed()
+        self._cache = {}
 
     def __contains__(self, name):
         """Return whether the configuration contains a section of the given
@@ -247,7 +250,8 @@
         elif self.parent:
             changed = True
             self.parent = None
-
+        if changed:
+            self._cache = {}
         return changed
 
     def touch(self):
@@ -294,6 +298,15 @@
         return '<Section [%s]>' % (self.name)
 
     def get(self, name, default=''):
+        key = (self.name, name)
+        value = self.config._cache.get(key, default)
+        if value == default:
+            value = self._get(name, default)
+            if value != default:
+                self.config._cache[key] = value
+        return value
+            
+    def _get(self, name, default=''):
         """Return the value of the specified option.
         
         Valid default input is a string. Returns a string.
@@ -401,6 +414,9 @@
         
         These changes are not persistent unless saved with `save()`.
         """
+        key = (self.name, name)
+        if key in self.config._cache:
+            del self.config._cache[key]
         if not self.config.parser.has_section(self.name):
             self.config.parser.add_section(self.name)
         if value is None:

