anchor.diff:  	// Walks up the stack looking for the variable.
   	// Handles dotted names of the form "a.b.c".
   	_resolveValue(String name) {
  -		// Handle implicit iterators
   		if (name == '.') {
   			return _stack.last;
   		}
  -
   		var parts = name.split('.');
  -
  -		// Optimistically assume all names are map keys at first,
  -		// since reflection is more expensive than map lookups.
  -		// This strategy should avoid penalizing users who do only
  -		// use maps and avoid relying on reflection.
  -
  -		var object = _stack
  -				.reversed
  -				.firstWhere(
  -						(v) => v is Map && v.containsKey(parts[0]),
  -						orElse: () => null);
  -
  -		if (object == null) {
  -			object = _stack
  -					.reversed
  -					.firstWhere(
  -							(v) => (object = _getNamedProperty(v, parts[0])) != null,
  -							orElse: () => null);
  -		} else {
  -			object = object[parts[0]];
  -		}
  -
  +		var object = _NO_SUCH_PROPERTY;
  +		for (var o in _stack.reversed) {
  +			object = _getNamedProperty(o, parts[0]);
  +			if (object != _NO_SUCH_PROPERTY) {
  +				break;
  +			}
  +		}
   		for (int i = 1; i < parts.length; i++) {
  -			if (object == null) {
  -				return null;
  +			if (object == null || object == _NO_SUCH_PROPERTY) {
  +				return _NO_SUCH_PROPERTY;
   			}
   			object = _getNamedProperty(object, parts[i]);
   		}
  -
   		return object;
   	}
   
  -	// Returns the property of the given object by name.  For a map,
  -	// this is object[name].  For other objects, this is object.name
  -	// or object.name().
  +	// Returns the property of the given object by name. For a map,
  +	// which contains the key name, this is object[name]. For other
  +	// objects, this is object.name or object.name(). If no property
  +	// by the given name exists, this method returns _NO_SUCH_PROPERTY.
   	_getNamedProperty(object, name) {
  -		if (object is Map) {
  +		var property = null;
  +		if (object is Map && object.containsKey(name)) {
   			return object[name];
  +		}
  +		if (_lenient && !_validTag.hasMatch(name)) {
  +			return _NO_SUCH_PROPERTY;
   		}
   		var instance = reflect(object);
   		var field = instance.type.members[new Symbol(name)];
   		if (field == null) {
  -			return null;
  +			return _NO_SUCH_PROPERTY;
   		}
   		var invocation = null;
  -		if (field is VariableMirror || field is MethodMirror && field.isGetter) {
  +		if ((field is VariableMirror) || ((field is MethodMirror) && (field.isGetter))) {
   			invocation = instance.getField(field.simpleName);
  -		} else if (field is MethodMirror && field.parameters.length == 0) {
  +		} else if ((field is MethodMirror) && (field.parameters.length == 0)) {
   			invocation = instance.invoke(field.simpleName, []);
   		}
   		if (invocation == null) {
  -			return null;
  +			return _NO_SUCH_PROPERTY;
   		}
   		return invocation.reflectee;
   	}
   
   	_renderVariable(node, {bool escape : true}) {
   		final value = _resolveValue(node.value);
  -		if (value == null) {
  +		if (value == _NO_SUCH_PROPERTY) {
   			if (!_lenient)
   				throw new MustacheFormatException(
  -					'Value was null or missing, '
  +					'Value was missing, '
   					'variable: ${node.value}, '
   					'at: ${node.line}:${node.column}.', node.line, node.column);
   		} else {
  -			var output = !escape || !_htmlEscapeValues 
  -				? value.toString()
  -				: _htmlEscape(value.toString());
  +			var valueString = (value == null) ? '' : value.toString();
  +			var output = !escape || !_htmlEscapeValues
  +				? valueString
  +				: _htmlEscape(valueString);
   			_write(output);
   		}
   	}
  
positive.code: 	_Node(this.type, this.value, this.line, this.column);
  	_Node.fromToken(_Token token)
  		: type = token.type,
  		  value = token.value,
  		  line = token.line,
  		  column = token.column;
  	final int type;
  	final String value;
  	final int line;
  
negative.code: 
  	_renderSection(node) {
  		final value = _resolveValue(node.value);
  		if (value == null) {
  			// Do nothing.
  		} else if (value is Iterable) {
  			value.forEach((v) => _renderSectionWithValue(node, v));
  		} else if (value is Map) {
  			_renderSectionWithValue(node, value);
  