- fixed codegen bug when defining <%def> within <%call> within <%call>
diff --git a/CHANGES b/CHANGES
index 26539d3..70cdea3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -18,6 +18,7 @@
   encoding_errors='htmlentityreplace' [ticket:37]
 - control lines, i.e. % lines, support backslashes to continue long
   lines (#32)
+- fixed codegen bug when defining <%def> within <%call> within <%call>
   
 0.1.5
 - AST expression generation - added in just about everything 
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index 379cb4c..71df6b8 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -525,7 +525,8 @@
                 export.append(node.name)
                 # remove defs that are within the <%call> from the "closuredefs" defined
                 # in the body, so they dont render twice
-                del body_identifiers.closuredefs[node.name]
+                if node.name in body_identifiers.closuredefs:
+                    del body_identifiers.closuredefs[node.name]
 
         vis = DefVisitor()
         for n in node.nodes:
diff --git a/test/call.py b/test/call.py
index 3dfdbe3..8de429c 100644
--- a/test/call.py
+++ b/test/call.py
@@ -1,7 +1,7 @@
 from mako.template import Template
 from mako import util
 import unittest
-from util import result_lines
+from util import result_lines, flatten_result
 
 class CallTest(unittest.TestCase):
     def test_call(self):
@@ -213,6 +213,27 @@
             "bar:",
             "this is bar body: 10"
         ]
+
+    def test_nested_call_3(self):
+        template = Template('''\
+        <%def name="A()">
+          ${caller.body()}
+        </%def>
+
+        <%def name="B()">
+          ${caller.foo()}
+        </%def>
+
+        <%call expr="A()">
+          <%call expr="B()">
+            <%def name="foo()">
+              foo
+            </%def>
+          </%call>
+        </%call>
+
+        ''')
+        assert flatten_result(template.render()) == "foo"
         
     def test_chained_call_in_nested(self):
         t = Template("""