Index: repoze/bfg/jinja2/tests/test_bindings.py
===================================================================
--- repoze/bfg/jinja2/tests/test_bindings.py	(revision 5225)
+++ repoze/bfg/jinja2/tests/test_bindings.py	(working copy)
@@ -1,3 +1,4 @@
+import os.path
 import unittest
 
 class TestBindings(unittest.TestCase):
@@ -4,9 +5,25 @@
     def test_load_template(self):
         from repoze.bfg.jinja2.bindings import load_template
         template = load_template('templates/helloworld.jinja2')
-        self.assertEqual(template,
-              u"{% set a, b = 'foo', 'f\xf6\xf6' %}\nHello {{ b }}\n")
+        self.assertEqual(template[0], 
+            u"{% set a, b = 'foo', 'f\xf6\xf6' %}\nHello {{ b }}\n")
+        self.assert_(
+            template[1].endswith('tests/templates/helloworld.jinja2')
+            )
+        self.assertEqual(template[2](), True)
 
+    def test_load_deleted_template(self):
+        from repoze.bfg.jinja2.bindings import load_template
+        name = 'templates/to_delete.jinja2'
+        path = os.path.join(os.path.dirname(__file__), name)
+        f = open(path, 'w')
+        f.write('')
+        f.close()
+        template = load_template(name)
+        self.assertEqual(template[2](), True)
+        os.unlink(path)
+        self.assertEqual(template[2](), False)
+        
     def test_get_template(self):
         from repoze.bfg.jinja2.bindings import get_template
         template = get_template('templates/helloworld.jinja2')
@@ -24,4 +41,3 @@
         self.assertEqual(response.app_iter[0],
                          u'\nHello f\xf6\xf6'.encode('utf-8'))
         
-        
Index: repoze/bfg/jinja2/bindings.py
===================================================================
--- repoze/bfg/jinja2/bindings.py	(revision 5225)
+++ repoze/bfg/jinja2/bindings.py	(working copy)
@@ -1,16 +1,40 @@
+from os.path import getmtime
+
 from webob import Response
 
+from zope.component import queryUtility
+
+from repoze.bfg.interfaces import ISettings
 from repoze.bfg.path import caller_path
 
 from jinja2.loaders import FunctionLoader
 from jinja2 import Environment
 
+def _auto_reload():
+    settings = queryUtility(ISettings)
+    auto_reload = settings and settings.reload_templates
+    return auto_reload
+    
 def load_template(path):
     path = caller_path(path)
     data = open(path, 'rb').read()
-    return unicode(data, 'utf-8')
+    mtime = getmtime(path)
+    def uptodate():
+        try:
+            return getmtime(path) == mtime
+        except OSError:
+            return False
+    return unicode(data, 'utf-8'), path, uptodate
 
-env = Environment(loader=FunctionLoader(load_template))
+class BfgLoader(FunctionLoader):
+    """ 
+    Extends jinja2.loaders.FunctionLoader with configurable auto-reloading.    
+    """
+    def get_source(self, environment, template):
+        environment.auto_reload = _auto_reload()
+        return super(BfgLoader, self).get_source(environment, template)
+        
+env = Environment(loader=BfgLoader(load_template))
 
 def get_template(path):
     """ Return a z3c.pt template object at the package-relative path
