Index: src/uk/me/parabola/mkgmap/osmstyle/RuleFileReader.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/RuleFileReader.java	(revision 3804)
+++ src/uk/me/parabola/mkgmap/osmstyle/RuleFileReader.java	(working copy)
@@ -16,10 +16,18 @@
  */
 package uk.me.parabola.mkgmap.osmstyle;
 
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.AND;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.EQUALS;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.EXISTS;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.FUNCTION;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.NOT;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.NOT_EXISTS;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.OR;
+import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.VALUE;
+
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.Reader;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Deque;
 import java.util.Formatter;
@@ -27,28 +35,22 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.TreeSet;
 
 import uk.me.parabola.imgfmt.Utils;
 import uk.me.parabola.log.Logger;
 import uk.me.parabola.mkgmap.general.LevelInfo;
-import uk.me.parabola.mkgmap.osmstyle.actions.Action;
 import uk.me.parabola.mkgmap.osmstyle.actions.ActionList;
 import uk.me.parabola.mkgmap.osmstyle.actions.ActionReader;
-import uk.me.parabola.mkgmap.osmstyle.actions.AddTagAction;
 import uk.me.parabola.mkgmap.osmstyle.eval.AndOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.BinaryOp;
-import uk.me.parabola.mkgmap.osmstyle.eval.EqualsOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.ExistsOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.ExpressionReader;
 import uk.me.parabola.mkgmap.osmstyle.eval.LinkedOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.NodeType;
-import uk.me.parabola.mkgmap.osmstyle.eval.NotEqualOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.NotOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.Op;
 import uk.me.parabola.mkgmap.osmstyle.eval.OrOp;
 import uk.me.parabola.mkgmap.osmstyle.eval.ValueOp;
-import uk.me.parabola.mkgmap.osmstyle.function.GetTagFunction;
 import uk.me.parabola.mkgmap.osmstyle.function.StyleFunction;
 import uk.me.parabola.mkgmap.reader.osm.FeatureKind;
 import uk.me.parabola.mkgmap.reader.osm.GType;
@@ -58,8 +60,6 @@
 import uk.me.parabola.mkgmap.scan.Token;
 import uk.me.parabola.mkgmap.scan.TokenScanner;
 
-import static uk.me.parabola.mkgmap.osmstyle.eval.NodeType.*;
-
 /**
  * Read a rules file.  A rules file contains a list of rules and the
  * resulting garmin type, should the rule match.
@@ -120,7 +120,7 @@
 		// Read all the rules in the file.
 		scanner.skipSpace();
 		while (!scanner.isEndOfFile()) {
-			if (checkCommand(loader, scanner))
+			if (checkCommand(loader, scanner, expressionReader))
 				continue;
 
 			if (scanner.isEndOfFile())
@@ -165,8 +165,9 @@
 	 * @param currentLoader The current style loader. Any included files are loaded from here, if no other
 	 * style is specified.
 	 * @param scanner The current token scanner.
+	 * @param expressionReader The current expression reader
 	 */
-	private boolean checkCommand(StyleFileLoader currentLoader, TokenScanner scanner) {
+	private boolean checkCommand(StyleFileLoader currentLoader, TokenScanner scanner, ExpressionReader expressionReader) {
 		scanner.skipSpace();
 		if (scanner.isEndOfFile())
 			return false;
@@ -175,7 +176,7 @@
 			if (readInclude(currentLoader, scanner)) return true;
 
 		} else if (scanner.checkToken("if")) {
-			if (readIf(scanner)) return true;
+			if (readIf(scanner, expressionReader)) return true;
 
 		} else if (scanner.checkToken("else")) {
 			if (readElse(scanner)) return true;
@@ -191,7 +192,7 @@
 		return false;
 	}
 
-	private boolean readIf(TokenScanner scanner) {
+	private boolean readIf(TokenScanner scanner, ExpressionReader expressionReader) {
 		// Take the 'if' token
 		Token tok = scanner.nextToken();
 		scanner.skipSpace();
@@ -200,7 +201,6 @@
 		Token next = scanner.peekToken();
 		if (next.getType() == TokType.SYMBOL && next.isValue("(")) {
 
-			ExpressionReader expressionReader = new ExpressionReader(scanner, kind);
 			Op expr = expressionReader.readConditions();
 			scanner.validateNext("then");
 
