--- a/asciidoc.py       2010-10-17 14:01:35.000000000 +0800
+++ b/asciidoc.py       2010-10-17 14:11:07.000000000 +0800
@@ -4260,10 +4260,12 @@
         self.include1 = {}      # Holds include1::[] files for {include1:}.
         self.dumping = False    # True if asciidoc -c option specified.

-    def load_file(self,fname,dir=None):
+    def load_file(self, fname, dir=None, include=[]):
         """
         Loads sections dictionary with sections from file fname.
         Existing sections are overlaid.
+        The 'include' list contains the section names to be loaded,
+        if 'inlude' is not specified all sections are loaded.
         Return False if no file was found in any of the locations.
         """
         if dir:
@@ -4317,9 +4319,14 @@
             else:
                 sections[section] = contents
         rdr.close()
+        if include:
+            for s in set(sections) - set(include):
+                del sections[s]
         attrs = {}
         self.load_sections(sections,attrs)
-        self.loaded.append(os.path.realpath(fname))
+        if not include:
+            # If all sections are loaded mark this file as loaded.
+            self.loaded.append(os.path.realpath(fname))
         document.update_attributes(attrs) # So they are available immediately.
         return True

@@ -5314,13 +5321,17 @@
             if o == '-c': config.dumping = True
             if o == '-s': config.header_footer = False
             if o == '-v': config.verbose = True
-        # Check the infile exists.
-        if infile != '<stdin>' and not os.path.isfile(infile):
-            raise EAsciiDoc,'input file %s missing' % infile
-        document.infile = infile
         # Load asciidoc.conf files.
         if not config.load_from_dirs('asciidoc.conf'):
             raise EAsciiDoc,'configuration file asciidoc.conf missing'
+        # Check the infile exists.
+        if infile != '<stdin>':
+            if not os.path.isfile(infile):
+                raise EAsciiDoc,'input file %s missing' % infile
+            indir = os.path.dirname(infile)
+            config.load_file('asciidoc.conf', indir,
+                            ['attributes','titles','specialchars'])
+        document.infile = infile
         AttributeList.initialize()
         # Open input file and parse document header.
         reader.tabsize = config.tabsize
@@ -5343,10 +5354,9 @@
             document.load_lang()
         # Load local conf files (conf files in the input file directory).
         if infile != '<stdin>':
-            d =os.path.dirname(infile)
-            config.load_from_dirs('asciidoc.conf', [d])
-            config.load_backend([d])
-            config.load_filters([d])
+            config.load_file('asciidoc.conf', indir)
+            config.load_backend([indir])
+            config.load_filters([indir])
             # Load document specific configuration files.
             f = os.path.splitext(infile)[0]
             config.load_file(f + '.conf')
--- a/doc/asciidoc.txt  2010-10-17 14:11:34.000000000 +0800
+++ b/doc/asciidoc.txt  2010-10-17 14:13:21.000000000 +0800
@@ -3632,6 +3632,8 @@
 the following order:

 - `asciidoc.conf` from locations 1, 2, 3.
+- 'attributes', 'titles' and 'specialcharacters' sections from the
+  `asciidoc.conf` in location 4.
 - The document header is parsed at this point.
 - `<backend>.conf` and `<backend>-<doctype>.conf` from locations 1,
   2,3.

