Index: vendor/trac/trac/config.py
===================================================================
--- vendor/trac/trac/config.py	(revision 8345)
+++ vendor/trac/trac/config.py	(working copy)
@@ -185,6 +186,7 @@
         # Only save options that differ from the defaults
         sections = []
         for section in self.sections():
+            self[section].reset()
             options = []
             for option in self[section]:
                 default = None
@@ -261,13 +264,17 @@
     
     Objects of this class should not be instantiated directly.
     """
-    __slots__ = ['config', 'name', 'overridden']
+    __slots__ = ['config', 'name', 'overridden', 'reset', '_cache']
 
     def __init__(self, config, name):
         self.config = config
         self.name = name
         self.overridden = {}
+        self._cache = {}
 
+    def reset(self):
+        self._cache = {}
+
     def __contains__(self, name):
         if self.config.parser.has_option(self.name, name):
             return True
@@ -294,6 +301,11 @@
         return '<Section [%s]>' % (self.name)
 
     def get(self, name, default=''):
+        if name not in self._cache:
+            self._cache[name] = self._get(name, default)
+        return self._cache[name]
+            
+    def _get(self, name, default=''):
         """Return the value of the specified option.
         
         Valid default input is a string. Returns a string.
@@ -401,6 +413,8 @@
         
         These changes are not persistent unless saved with `save()`.
         """
+        if name in self._cache:
+            del self._cache[name]
         if not self.config.parser.has_section(self.name):
             self.config.parser.add_section(self.name)
         if value is None:

