diff --git a/lib/src/scanner.dart b/lib/src/scanner.dart
index 8c7665c..f07c68c 100644
--- a/lib/src/scanner.dart
+++ b/lib/src/scanner.dart
@@ -11,18 +11,31 @@
      _lenient = lenient,
      _itr = source.runes.iterator {
     
-    var delims = _parseDelimiterString(delimiters);
-    _openDelimiter = delims[0];
-    _openDelimiterInner = delims[1];
-    _closeDelimiterInner = delims[2];
-    _closeDelimiter = delims[3];
-    
     if (source == '') {
       _c = _EOF;
     } else {
       _itr.moveNext();
       _c = _itr.current;
     }
+    
+    if (delimiters == null) {
+      _openDelimiter = _openDelimiterInner = _OPEN_MUSTACHE;
+      _closeDelimiter = _closeDelimiterInner = _CLOSE_MUSTACHE;
+    
+    } else if (delimiters.length == 3) {
+      _openDelimiter = delimiters.codeUnits[0];
+      _closeDelimiter = delimiters.codeUnits[2];
+    
+    } else if (delimiters.length == 5) {
+      _openDelimiter = delimiters.codeUnits[0];
+      _openDelimiterInner = delimiters.codeUnits[1];
+      _closeDelimiterInner = delimiters.codeUnits[3];
+      _closeDelimiter = delimiters.codeUnits[4];
+    
+    } else {
+      throw new TemplateException(
+              'Invalid delimiter string $delimiters', null, null, null);   
+    }
   }
 
   final String _templateName;
@@ -320,11 +333,16 @@
     if (delimiterInner != null) _expect(delimiterInner);
      _expect(delimiter);
     
-     var value = _delimiterString(
-         _openDelimiter,
-         _openDelimiterInner,
-         _closeDelimiterInner,
-         _closeDelimiter);
+     // Create delimiter string.
+     var buffer = new StringBuffer();
+     buffer.writeCharCode(_openDelimiter);
+     if (_openDelimiterInner != null) buffer.writeCharCode(_openDelimiterInner);
+     buffer.write(' ');
+     if (_closeDelimiterInner != null) {
+       buffer.writeCharCode(_closeDelimiterInner);
+     }
+     buffer.writeCharCode(_closeDelimiter);
+     var value = buffer.toString();
           
      _append(TokenType.changeDelimiter, value, start, _offset);
   }
@@ -335,33 +353,6 @@
 
 }
 
-_delimiterString(int open, int openInner, int closeInner, int close) {
-  var buffer = new StringBuffer();
-  buffer.writeCharCode(open);
-  if (openInner != null) buffer.writeCharCode(openInner);
-  buffer.write(' ');
-  if (closeInner != null) buffer.writeCharCode(closeInner);
-  buffer.writeCharCode(close);
-  return buffer.toString();
-}
-
-List<int> _parseDelimiterString(String s) {
-  if (s == null) return [_OPEN_MUSTACHE, _OPEN_MUSTACHE,
-                         _CLOSE_MUSTACHE, _CLOSE_MUSTACHE];
-  if (s.length == 3) {
-    return [s.codeUnits[0], null, null, s.codeUnits[2]];
-  
-  } else if (s.length == 5) {
-    return [s.codeUnits[0],
-            s.codeUnits[1],
-            s.codeUnits[3],
-            s.codeUnits[4]];
-  } else {
-    throw new TemplateException(
-        'Invalid delimiter string $s', null, null, null);
-  }  
-}
-
 const int _EOF = -1;
 const int _TAB = 9;
 const int _NEWLINE = 10;
