Index: tracnav/tracnav.py
===================================================================
--- tracnav/tracnav.py	(revision 80)
+++ tracnav/tracnav.py	(revision 82)
@@ -62,6 +62,7 @@
 from trac.core import Component, implements
 from trac.wiki.api import WikiSystem, IWikiMacroProvider
 from trac.web.chrome import ITemplateProvider, add_stylesheet
+from trac.web.main import IRequestFilter
 from trac.wiki.model import WikiPage
 from trac.wiki.formatter import Formatter, OneLinerFormatter
 from StringIO import StringIO
@@ -292,8 +293,9 @@
 
 class TracNav(Component):
 
-    implements(IWikiMacroProvider, ITemplateProvider)
+    implements(IWikiMacroProvider, ITemplateProvider, IRequestFilter)
 
+    # IWikiMacroProvider methods
     def get_macros(self):
         yield 'TracNav'
         yield 'JPNav' # legacy
@@ -307,6 +309,8 @@
         from inspect import getdoc, getmodule
         return getdoc(getmodule(self))
 
+
+    # ITemplateProvider methods
     def get_htdocs_dirs(self):
         from pkg_resources import resource_filename
         return [('tracnav', resource_filename(__name__, 'htdocs'))]
@@ -314,3 +318,19 @@
     def get_templates_dirs(self):
         # we don't provide templates
         return []
+
+
+    # IRequestFilter methods
+    def pre_process_request(self, req, handler):
+        return handler
+
+    def post_process_request(self, req, template, content_type):
+        if req.path_info == '/' or \
+	  req.path_info.startswith('/wiki'):
+            self._do_post_process(req)
+	return template, content_type
+
+    def _do_post_process(self, req):
+	out = StringIO()
+        Invocation(self.env, req, '', out).run()
+	req.hdf.setValue('tracnavplugin.toc', out.getvalue())
