Index: src/uk/me/parabola/mkgmap/osmstyle/RuleIndex.java
===================================================================
--- src/uk/me/parabola/mkgmap/osmstyle/RuleIndex.java	(revision 4175)
+++ src/uk/me/parabola/mkgmap/osmstyle/RuleIndex.java	(working copy)
@@ -171,6 +171,8 @@
 		// Maps a rule number to the tags that might be changed by that rule
 		Map<Integer, List<String>> changeTags = new HashMap<Integer, List<String>>();
 		
+		Set<String> possiblyChangedOrAdded = new HashSet<>();
+		
 		// remove unnecessary rules
 		filterRules();
 		
@@ -188,10 +190,20 @@
 				int ind = keystring.indexOf('=');
 				if (ind >= 0) {
 					String key = keystring.substring(0, ind);
-					addNumberToMap(tagnames, key, ruleNumber);
+					if (possiblyChangedOrAdded.contains(key))
+						addNumberToMap(tagnames, key, ruleNumber);
 				} 
 			}
 			addChangables(changeTags, changeableTags, ruleNumber);
+			for (String ent : changeableTags) {
+				int ind = ent.indexOf('=');
+				if (ind >= 0) {
+					String key = ent.substring(0, ind);
+					possiblyChangedOrAdded.add(key);
+				} else {
+					possiblyChangedOrAdded.add(ent);
+				}
+			}
 		}
 		
 		for (Map.Entry<Integer, List<String>> ent : changeTags.entrySet()) {
@@ -358,6 +370,8 @@
 	 * @param ruleNumber The rule number.
 	 */
 	private static void addChangables(Map<Integer, List<String>> changeTags, Set<String> changeableTags, int ruleNumber) {
+		if(changeableTags.isEmpty())
+			return;
 		List<String> tags = changeTags.get(ruleNumber);
 		if (tags == null) {
 			tags = new ArrayList<String>();
