fixed a small bug

--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 343449c..66af667 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -325,7 +325,7 @@
             self.writeline('for event in parent_root(context):')
             self.indent()
             self.writeline('yield event')
-            self.outdent(2 + self.has_known_extends)
+            self.outdent(1 + self.has_known_extends)
 
         # at this point we now have the blocks collected and can visit them too.
         for name, block in self.blocks.iteritems():
@@ -343,12 +343,12 @@
         """Call a block and register it for the template."""
         # if we know that we are a child template, there is no need to
         # check if we are one
-        if self.has_known_extends:
+        if self.has_known_extends and frame.toplevel:
             return
         if frame.toplevel:
             self.writeline('if parent_root is None:')
             self.indent()
-        self.writeline('for event in block_%s(context):' % node.name)
+        self.writeline('for event in context.blocks[-1][%r](context):' % node.name)
         self.indent()
         self.writeline('yield event')
         self.outdent(1 + frame.toplevel)
@@ -506,7 +506,7 @@
 
     def visit_Output(self, node, frame):
         # if we have a known extends statement, we don't output anything
-        if self.has_known_extends:
+        if self.has_known_extends and frame.toplevel:
             return
 
         self.newline(node)