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) {
