diff -u -r Genshi-0.4/genshi/template/directives.py Genshi-0.4-textinclude/genshi/template/directives.py
--- Genshi-0.4/genshi/template/directives.py	2007-04-16 14:58:43.000000000 +0100
+++ Genshi-0.4-textinclude/genshi/template/directives.py	2007-05-11 18:54:38.000000000 +0100
@@ -24,7 +24,7 @@
 __all__ = ['AttrsDirective', 'ChooseDirective', 'ContentDirective',
            'DefDirective', 'ForDirective', 'IfDirective', 'MatchDirective',
            'OtherwiseDirective', 'ReplaceDirective', 'StripDirective',
-           'WhenDirective', 'WithDirective']
+           'WhenDirective', 'WithDirective', 'IncludeDirective']
 __docformat__ = 'restructuredtext en'
 
 
@@ -676,3 +676,26 @@
 
     def __repr__(self):
         return '<%s>' % (self.__class__.__name__)
+
+
+class IncludeDirective(Directive):
+    """Implementation of the #include template directive for including
+    template output."""
+    __slots__ = ['include_ref', 'relative_to', 'loader']
+
+    def __init__(self, value, template, namespaces=None, lineno=-1, offset=-1):
+        Directive.__init__(self, None, template, namespaces, lineno, offset)
+        self.include_ref = value
+        self.relative_to = template.filepath
+        self.loader = template.loader
+        
+    def __call__(self, stream, ctxt, directives):
+        import genshi.template.text
+        template = self.loader.load(self.include_ref,
+                                    relative_to=self.relative_to,
+                                    cls=genshi.template.text.TextTemplate)
+        
+        return _apply_directives(template.generate(ctxt),
+                                 ctxt, directives)
+    def __repr__(self):
+        return '<%s "%s">' % (self.__class__.__name__, self.include_ref)
diff -u -r Genshi-0.4/genshi/template/tests/text.py Genshi-0.4-textinclude/genshi/template/tests/text.py
--- Genshi-0.4/genshi/template/tests/text.py	2007-04-16 14:58:43.000000000 +0100
+++ Genshi-0.4-textinclude/genshi/template/tests/text.py	2007-05-11 18:58:15.000000000 +0100
@@ -13,13 +13,22 @@
 
 import doctest
 import unittest
+import shutil
+import os
+import tempfile
 
 from genshi.template.text import TextTemplate
-
+from genshi.template.loader import TemplateLoader
 
 class TextTemplateTestCase(unittest.TestCase):
     """Tests for text template processing."""
 
+    def setUp(self):
+        self.dirname = tempfile.mkdtemp(suffix='markup_test')
+
+    def tearDown(self):
+        shutil.rmtree(self.dirname)
+
     def test_escaping(self):
         tmpl = TextTemplate('\\#escaped')
         self.assertEqual('#escaped', str(tmpl.generate()))
@@ -74,7 +83,28 @@
 
 """, tmpl.generate(items=range(3)).render('text'))
 
-
+    def test_include(self):
+        file1 = open(os.path.join(self.dirname, 'tmpl1.txt'), 'w')
+        try:
+            file1.write("Included\n")
+        finally:
+            file1.close()
+
+        file2 = open(os.path.join(self.dirname, 'tmpl2.txt'), 'w')
+        try:
+            file2.write("""----- Included data below this line -----
+            #include tmpl1.txt
+            ----- Included data above this line -----""")
+        finally:
+            file2.close()
+
+        loader = TemplateLoader([self.dirname])
+        tmpl = loader.load('tmpl2.txt', cls=TextTemplate)
+        self.assertEqual("""----- Included data below this line -----
+Included
+            ----- Included data above this line -----""",
+                         tmpl.generate().render())
+        
 def suite():
     suite = unittest.TestSuite()
     suite.addTest(doctest.DocTestSuite(TextTemplate.__module__))
diff -u -r Genshi-0.4/genshi/template/text.py Genshi-0.4-textinclude/genshi/template/text.py
--- Genshi-0.4/genshi/template/text.py	2007-04-16 14:58:43.000000000 +0100
+++ Genshi-0.4-textinclude/genshi/template/text.py	2007-05-11 18:55:08.000000000 +0100
@@ -95,6 +95,10 @@
                     substream = stream[start_offset:]
                     stream[start_offset:] = [(SUB, ([directive], substream),
                                               (self.filepath, lineno, 0))]
+            elif command == 'include':
+                pos = (self.filename, lineno, 0)
+                directive = IncludeDirective, value.strip(), None, pos
+                stream.append((SUB, ([directive], []), pos))
             elif command != '#':
                 cls = self._dir_by_name.get(command)
                 if cls is None:
