diff --git a/lib/src/scanner.dart b/lib/src/scanner.dart
index 83be433..b08bac0 100644
--- a/lib/src/scanner.dart
+++ b/lib/src/scanner.dart
@@ -58,12 +58,8 @@
 	_Token read() { var ret = i < tokens.length ? tokens[i++] : null; /* print('Read: $ret'); */ return ret; }
 	_Token peek([int n = 0]) => i + n < tokens.length ? tokens[i + n] : null;
 
-	bool isTag(token) => 
-			token != null
-			&& (token.type == _OPEN_SECTION
-				  || token.type == _OPEN_INV_SECTION
-				  || token.type == _CLOSE_SECTION
-				  || token.type == _COMMENT);
+	bool isTag(token) => token != null
+	    && const [_OPEN_SECTION, _OPEN_INV_SECTION, _CLOSE_SECTION, _COMMENT, _PARTIAL].contains(token.type);
 
 	bool isWhitespace(token) => token != null && token.type == _WHITESPACE;
 	bool isLineEnd(token) => token != null && token.type == _LINE_END;
@@ -128,11 +124,12 @@
 }
 
 class _Token {
-	_Token(this.type, this.value, this.line, this.column);
+	_Token(this.type, this.value, this.line, this.column, {this.indent});
 	final int type;
 	final String value;
 	final int line;
 	final int column;
+	final String indent;
 	toString() => "${_tokenTypeString(type)}: \"${value.replaceAll('\n', '\\n')}\" $line:$column";
 }
 
@@ -160,6 +157,26 @@
 		_tokens.add(new _Token(type, value, l, c));
 	}
 
+	_addPartialToken() {
+    // 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) {
+	      indent = _tokens.last.value;
+	    
+	    } else if (_tokens.length > 1) {
+	      if (_tokens.last.type == _WHITESPACE
+	          && _tokens[_tokens.length - 2].type == _NEWLINE) {
+	        indent = _tokens.last.value;
+	      }
+	    }
+	  }
+	  
+    int l = _r.line, c = _r.column;
+    var value = _readString().trim();
+    _tokens.add(new _Token(_PARTIAL, value, l, c, indent: indent));
+	}
+	
 	_expect(int expectedCharCode) {
 		int c = _read();
 
@@ -279,7 +296,7 @@
 			// Partial {{> ... }}
 			case _GT:
 				_read();
-				_addStringToken(_PARTIAL);
+				_addPartialToken();
 				break;
 
 			// Open section {{# ... }}
diff --git a/lib/src/template.dart b/lib/src/template.dart
index 1db8898..7a1fed1 100644
--- a/lib/src/template.dart
+++ b/lib/src/template.dart
@@ -115,10 +115,11 @@
 	    this._lenient,
 	    this._htmlEscapeValues,
 	    this._partialResolver,
-	    this._templateName)
+	    this._templateName,
+	    [this._indent])
     : _stack = new List.from(stack); 
 	
-	_Renderer.partial(_Renderer renderer, _Template partial)
+	_Renderer.partial(_Renderer renderer, _Template partial, String indent)
       : this(partial._root,
           renderer._sink,
           renderer._values,
@@ -146,6 +147,7 @@
 	final bool _htmlEscapeValues;
 	final PartialResolver _partialResolver;
 	final String _templateName;
+	final String _indent;
 
 	void render() {
 		_root.children.forEach(_renderNode);
@@ -352,7 +354,7 @@
         ? null
         : _partialResolver(partialName);
     if (template != null) {
-      var renderer = new _Renderer.partial(this, template);
+      var renderer = new _Renderer.partial(this, template, node.indent);
       renderer.render();      
     } else if (_lenient) {
       // do nothing
@@ -405,16 +407,18 @@
 }
 
 class _Node {
-	_Node(this.type, this.value, this.line, this.column);
+	_Node(this.type, this.value, this.line, this.column, {this.indent});
 	_Node.fromToken(_Token token)
 		: type = token.type,
 			value = token.value,
 			line = token.line,
-			column = token.column;
+			column = token.column,
+			indent = token.indent;
 	final int type;
 	final String value;
 	final int line;
 	final int column;
+	final String indent;
 	final List<_Node> children = new List<_Node>();
 	String toString() => '_Node: ${_tokenTypeString(type)}';
 }
