Initial attempt at indenting partial content correctly - no dice
diff --git a/lib/mustache.dart b/lib/mustache.dart
index 39dfb75..0fa0e7e 100644
--- a/lib/mustache.dart
+++ b/lib/mustache.dart
@@ -4,6 +4,7 @@
 import 'dart:mirrors';
 
 part 'src/char_reader.dart';
+part 'src/prefixing_string_sink.dart';
 part 'src/scanner.dart';
 part 'src/template.dart';
 
diff --git a/lib/src/prefixing_string_sink.dart b/lib/src/prefixing_string_sink.dart
new file mode 100644
index 0000000..fffeb2b
--- /dev/null
+++ b/lib/src/prefixing_string_sink.dart
@@ -0,0 +1,51 @@
+part of mustache;
+
+class PrefixingStringSink implements StringSink {
+    
+  bool _started = false;
+  final StringSink _sink;
+  final String _prefix;
+
+  PrefixingStringSink(this._sink, this._prefix);
+
+  void write(Object obj) {
+    if (!_started) {
+      _started = true;
+      _sink.write(_prefix);
+    }
+    var s = obj.toString();
+    _sink.write(s.replaceAll('\n', '\n$_prefix'));
+  }
+  
+  void writeCharCode(int charCode) {
+    if (!_started) {
+      _started = true;
+      _sink.write(_prefix);
+    }
+    _sink.writeCharCode(charCode);
+    if (charCode == _NEWLINE) _sink.write(_prefix);
+  }
+
+  void writeAll(Iterable objects, [String separator = ""]) {
+    Iterator iterator = objects.iterator;
+    if (!iterator.moveNext()) return;
+    if (separator.isEmpty) {
+      do {
+        write(iterator.current);
+      } while (iterator.moveNext());
+    } else {
+      write(iterator.current);
+      while (iterator.moveNext()) {
+        write(separator);
+        write(iterator.current);
+      }
+    }
+  }
+
+  void writeln([Object obj = ""]) {
+    write(obj);
+    _sink.write('\n');
+    _sink.write(_prefix);
+  }
+
+}
diff --git a/lib/src/scanner.dart b/lib/src/scanner.dart
index b08bac0..18e5da2 100644
--- a/lib/src/scanner.dart
+++ b/lib/src/scanner.dart
@@ -161,7 +161,7 @@
     // Capture whitespace preceding a partial tag so it can used for indentation during rendering.

 	  var indent = '';

 	  if (_tokens.isNotEmpty) {

-	    if (_tokens.length == 1 && _tokens.last == _WHITESPACE) {

+	    if (_tokens.length == 1 && _tokens.last.type == _WHITESPACE) {

 	      indent = _tokens.last.value;

 	    

 	    } else if (_tokens.length > 1) {

diff --git a/lib/src/template.dart b/lib/src/template.dart
index 7a1fed1..3e2a365 100644
--- a/lib/src/template.dart
+++ b/lib/src/template.dart
@@ -121,7 +121,9 @@
 	

 	_Renderer.partial(_Renderer renderer, _Template partial, String indent)

       : this(partial._root,

-          renderer._sink,

+          indent == null || indent == ''

+            ? renderer._sink

+            : new PrefixingStringSink(renderer._sink, indent),

           renderer._values,

           renderer._stack,

           renderer._lenient,

@@ -354,6 +356,8 @@
         ? null

         : _partialResolver(partialName);

     if (template != null) {

+      print('render partial with indent "${node.indent}"');

+      //TODO Check if nested partials indent correctly?

       var renderer = new _Renderer.partial(this, template, node.indent);

       renderer.render();      

     } else if (_lenient) {