More parser tweaks
diff --git a/lib/src/parser.dart b/lib/src/parser.dart
index 391292a..93157b5 100644
--- a/lib/src/parser.dart
+++ b/lib/src/parser.dart
@@ -226,27 +226,10 @@
       assert(_peek().type == TokenType.lineEnd || _i == 0);
   
       var precedingLineEnd = _readIf(TokenType.lineEnd, eofOk: true);
-      var precedingWhitespace = _readIf(TokenType.whitespace, eofOk: true);
-          
-      Tag tag;
-      Node tagNode;
-      if (_peek() != null && _peek().type == TokenType.openDelimiter) {
-        tag = _readTag();
-        tagNode = _createNodeFromTag(tag,
-            partialIndent: precedingWhitespace == null
-              ? ''
-              : precedingWhitespace.value);
-        
-      } else if (_peek() != null && _peek().type == TokenType.changeDelimiter) {
-        // Need to handle standalone lines for change delimiter tags too.
-        // The change delimiter token actually represents the entire tag which
-        // was already parsed in the scanner.
-        var token = _read();
-        tag = new Tag(TagType.changeDelimiter, token.value, token.start, token.end);
-        tagNode = null;
-        _currentDelimiters = token.value;
-      }
-      
+      var precedingWhitespace = _readIf(TokenType.whitespace, eofOk: true);          
+      var indent = precedingWhitespace == null ? '' : precedingWhitespace.value;
+      var tag = _readTag();
+      var tagNode = _createNodeFromTag(tag, partialIndent: indent);
       var followingWhitespace = _readIf(TokenType.whitespace, eofOk: true);
 
       // Need to emit leading whitespace if the last line was not a standalone
@@ -289,6 +272,9 @@
   }
   
   Node _createNodeFromTag(Tag tag, {String partialIndent: ''}) {
+    // Handle EOF case.
+    if (tag == null) return null;
+    
     Node node = null;
     switch (tag.type) {
       
@@ -310,9 +296,9 @@
         node = new PartialNode(tag.name, tag.start, tag.end, partialIndent);
         break;
             
-      // Return null for close section.
       case TagType.closeSection:
       case TagType.comment:
+      case TagType.changeDelimiter:
         node = null;
         break;
 
@@ -332,9 +318,29 @@
           '>': TagType.partial,
           '!': TagType.comment};
   
-  //TODO clean up EOF handling.
+
+  // If open delimiter, or change delimiter token then return a tag.
+  // If EOF or any another token then return null.
   Tag _readTag() {
     
+    var t = _peek();
+    if (t == null ||
+        (t.type != TokenType.changeDelimiter &&
+         t.type != TokenType.openDelimiter)) {
+      return null;
+    
+    } else if (t.type == TokenType.changeDelimiter) {      
+      _read();
+      // Remember the current delimiters.
+      _currentDelimiters = t.value;
+      
+      // Change delimiter tags are already parsed by the scanner.
+      // So just create a tag and return it.
+      return new Tag(TagType.changeDelimiter, t.value, t.start, t.end);
+    }
+    
+    // Start parsing a typical tag.
+    
     var open = _expect(TokenType.openDelimiter);
     
     _readIf(TokenType.whitespace);