diff --git a/lib/src/node.dart b/lib/src/node.dart
index ebd3824..1366fd0 100644
--- a/lib/src/node.dart
+++ b/lib/src/node.dart
@@ -30,22 +30,20 @@
       renderer._write(text);
     } else if (lastNode && text.runes.last == _NEWLINE) {
       var s = text.substring(0, text.length - 1);
-      renderer._write(s.replaceAll('\n', '\n$renderer._indent'));
+      renderer._write(s.replaceAll('\n', '\n${renderer._indent}'));
       renderer._write('\n');
     } else {
-      renderer._write(text.replaceAll('\n', '\n$renderer._indent'));
+      renderer._write(text.replaceAll('\n', '\n${renderer._indent}'));
     }
   }
 }
 
 class _VariableNode extends _Node {
   
-  _VariableNode(this.name, int start, int end, this.delimiters,
-      {this.escape: false})
+  _VariableNode(this.name, int start, int end, {this.escape: false})
     : super(start, end);
   
   final String name;
-  final String delimiters;
   final bool escape;
   
   render(_Renderer renderer) {
@@ -86,9 +84,11 @@
   final List<_Node> children = <_Node>[];
   
   //TODO can probably combine Inv and Normal to shorten.
-  void render(_Renderer renderer) => inverse
-      ? renderInv(renderer)
-      : renderNormal(renderer);
+  void render(_Renderer renderer) {
+    // Keep track of delimiters for use in LambdaContext.renderSource().
+    renderer._delimiters = delimiters;
+    return inverse ? renderInv(renderer) : renderNormal(renderer);
+  }
   
   void renderNormal(_Renderer renderer) {
     var value = renderer._resolveValue(name);
@@ -97,7 +97,7 @@
       // Do nothing.
     
     } else if (value is Iterable) {
-      value.forEach((v) => renderer._renderSectionWithValue(this, v));
+      value.forEach((v) => renderer._renderSectionWithValue(this, v)); //FIXME probably pull this code into the node?
     
     } else if (value is Map) {
       renderer._renderSectionWithValue(this, value);
@@ -159,11 +159,10 @@
 
 class _PartialNode extends _Node {
 
-  _PartialNode(this.name, int start, int end, this.delimiters, this.indent)
+  _PartialNode(this.name, int start, int end, this.indent)
     : super(start, end);
   
   final String name;
-  final String delimiters; //FIXME
   
   // Used to store the preceding whitespace before a partial tag, so that
   // it's content can be correctly indented.
@@ -176,7 +175,7 @@
         : renderer._partialResolver(partialName);
     if (template != null) {
       var r = new _Renderer.partial(renderer, template, this.indent);
-      r.render(); //FIXME Hmm change this.
+      r.render();
     } else if (renderer._lenient) {
       // do nothing
     } else {
diff --git a/lib/src/parse.dart b/lib/src/parse.dart
index 63695c6..cbaec3e 100644
--- a/lib/src/parse.dart
+++ b/lib/src/parse.dart
@@ -27,12 +27,12 @@
       case _VARIABLE:
       case _UNESC_VARIABLE:
         var n = new _VariableNode(
-            t.value, t.start, t.end, delim, escape: t.type != _UNESC_VARIABLE);
+            t.value, t.start, t.end, escape: t.type != _UNESC_VARIABLE);
         stack.last.children.add(n);
         break;
 
       case _PARTIAL:
-        var n = new _PartialNode(t.value, t.start, t.end, delim, t.indent); 
+        var n = new _PartialNode(t.value, t.start, t.end, t.indent); 
         stack.last.children.add(n);
         break;
 
@@ -60,7 +60,7 @@
         break;
       
       case _CHANGE_DELIMITER:
-        delimiters = t.value;
+        delim = t.value;
         break;
         
       case _COMMENT:
diff --git a/lib/src/renderer.dart b/lib/src/renderer.dart
index a6ca9f1..f429bf7 100644
--- a/lib/src/renderer.dart
+++ b/lib/src/renderer.dart
@@ -75,7 +75,9 @@
   final String _templateName;
   final String _indent;
   final String _source;
-
+  
+  // Need to keep track of the current delimiters during rendering.
+  // These are used in LambdaContext.renderSource().
   String _delimiters;
   
   void render() {
@@ -94,7 +96,9 @@
     
     _write(_indent);
     
-    nodes.take(nodes.length - 1).map((n) => n.render(this));
+    for (var n in nodes.take(nodes.length - 1)) {
+      n.render(this);
+    }
         
     var node = _root.children.last;
     if (node is _TextNode) {
