diff --git a/lib/src/parser.dart b/lib/src/parser.dart
index e59fde6..391292a 100644
--- a/lib/src/parser.dart
+++ b/lib/src/parser.dart
@@ -79,7 +79,7 @@
     return list;
   }
   
-  _checkEof() {
+  void _checkEof() {
     if (_peek() == null) throw 'End of file!'; //TODO error message;
   }
   
@@ -90,10 +90,10 @@
     return token;
   }
   
-  Token _readIf(TokenType type) {
+  Token _readIf(TokenType type, {eofOk: false}) {
     var token = _peek();
-    if (token == null) throw 'End of file!'; //TODO error message.
-    return token.type == type ? _read() : null;
+    if (!eofOk && token == null) throw 'End of file!'; //TODO error message.
+    return token != null && token.type == type ? _read() : null;
   }
   
   // Add a text node to top most section on the stack and merge consecutive
@@ -160,6 +160,7 @@
     
     _currentDelimiters = _delimiters;
     
+    _stack.clear();
     _stack.add(new SectionNode('root', 0, 0, _delimiters));    
   
     // Handle standalone tag on first line.
@@ -224,14 +225,8 @@
     
       assert(_peek().type == TokenType.lineEnd || _i == 0);
   
-      //TODO _readIf(TokenType) helper.
-      var precedingLineEnd = _peek() != null && _peek().type == TokenType.lineEnd
-          ? _read() : null;
-      
-      // The scanner guarantees that there will only be a single whitespace token,
-      // there are never consecutive whitespace tokens.
-      var precedingWhitespace =
-        _peek() != null && _peek().type == TokenType.whitespace ? _read() : null;
+      var precedingLineEnd = _readIf(TokenType.lineEnd, eofOk: true);
+      var precedingWhitespace = _readIf(TokenType.whitespace, eofOk: true);
           
       Tag tag;
       Node tagNode;
@@ -252,8 +247,7 @@
         _currentDelimiters = token.value;
       }
       
-      var followingWhitespace =
-        _peek() != null && _peek().type == TokenType.whitespace ? _read() : null;
+      var followingWhitespace = _readIf(TokenType.whitespace, eofOk: true);
 
       // Need to emit leading whitespace if the last line was not a standalone
       // line. The consecutive flag keeps track of this.
@@ -371,18 +365,19 @@
     //TODO incorporate this into _readWhile()
     _checkEof();
     
-    // Check to see if tag name is valid.
+    // Check to see if the tag name is valid.
     if (tagType != TagType.comment) {    
-      if (name == '') throw _error('Empty tag', open.start);
-      
-      if (name.contains('\t') || name.contains('\n') || name.contains('\r')) {
-        throw _error('Tags may not contain newlines or tabs.', open.start);
-      }    
-      
-      if (!_lenient && !_validIdentifier.hasMatch(name)) {
-        throw _error('Unless in lenient mode, tags may only contain the '
-            'characters a-z, A-Z, minus, underscore and period.', open.start);
-      }    
+      if (name == '') throw _error('Empty tag name.', open.start);      
+      if (!_lenient) {
+        if (name.contains('\t') || name.contains('\n') || name.contains('\r')) {
+          throw _error('Tags may not contain newlines or tabs.', open.start);
+        }    
+        
+        if (!_validIdentifier.hasMatch(name)) {
+          throw _error('Unless in lenient mode, tags may only contain the '
+              'characters a-z, A-Z, minus, underscore and period.', open.start);
+        }
+      }
     }
     
     var close = _expect(TokenType.closeDelimiter);
