Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/ImproveWayAccuracyAction.java	(revision 11913)
@@ -57,4 +57,6 @@
         SelectionChangedListener, ModifierListener {
 
+    private static final String CROSSHAIR = "crosshair";
+
     private enum State {
         SELECTING, IMPROVING
@@ -76,9 +78,9 @@
     private final Cursor cursorSelect = ImageProvider.getCursor("normal", "mode");
     private final Cursor cursorSelectHover = ImageProvider.getCursor("hand", "mode");
-    private final Cursor cursorImprove = ImageProvider.getCursor("crosshair", null);
-    private final Cursor cursorImproveAdd = ImageProvider.getCursor("crosshair", "addnode");
-    private final Cursor cursorImproveDelete = ImageProvider.getCursor("crosshair", "delete_node");
-    private final Cursor cursorImproveAddLock = ImageProvider.getCursor("crosshair", "add_node_lock");
-    private final Cursor cursorImproveLock = ImageProvider.getCursor("crosshair", "lock");
+    private final Cursor cursorImprove = ImageProvider.getCursor(CROSSHAIR, null);
+    private final Cursor cursorImproveAdd = ImageProvider.getCursor(CROSSHAIR, "addnode");
+    private final Cursor cursorImproveDelete = ImageProvider.getCursor(CROSSHAIR, "delete_node");
+    private final Cursor cursorImproveAddLock = ImageProvider.getCursor(CROSSHAIR, "add_node_lock");
+    private final Cursor cursorImproveLock = ImageProvider.getCursor(CROSSHAIR, "lock");
 
     private Color guideColor;
Index: /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/actions/mapmode/SelectAction.java	(revision 11913)
@@ -68,4 +68,6 @@
 public class SelectAction extends MapMode implements ModifierListener, KeyPressReleaseListener, SelectionEnded {
 
+    private static final String NORMAL = "normal";
+
     /**
      * Select action mode.
@@ -85,19 +87,20 @@
     // contains all possible cases the cursor can be in the SelectAction
     private enum SelectActionCursor {
-        rect("normal", /* ICON(cursor/modifier/) */ "selection"),
-        rect_add("normal", /* ICON(cursor/modifier/) */ "select_add"),
-        rect_rm("normal", /* ICON(cursor/modifier/) */ "select_remove"),
-        way("normal", /* ICON(cursor/modifier/) */ "select_way"),
-        way_add("normal", /* ICON(cursor/modifier/) */ "select_way_add"),
-        way_rm("normal", /* ICON(cursor/modifier/) */ "select_way_remove"),
-        node("normal", /* ICON(cursor/modifier/) */ "select_node"),
-        node_add("normal", /* ICON(cursor/modifier/) */ "select_node_add"),
-        node_rm("normal", /* ICON(cursor/modifier/) */ "select_node_remove"),
-        virtual_node("normal", /* ICON(cursor/modifier/) */ "addnode"),
-        scale(/* ICON(cursor/) */ "scale", null),
-        rotate(/* ICON(cursor/) */ "rotate", null),
-        merge(/* ICON(cursor/) */ "crosshair", null),
-        lasso("normal", /* ICON(cursor/modifier/) */ "rope"),
-        merge_to_node("crosshair", /* ICON(cursor/modifier/) */ "joinnode"),
+
+        rect(NORMAL, "selection"),
+        rect_add(NORMAL, "select_add"),
+        rect_rm(NORMAL, "select_remove"),
+        way(NORMAL, "select_way"),
+        way_add(NORMAL, "select_way_add"),
+        way_rm(NORMAL, "select_way_remove"),
+        node(NORMAL, "select_node"),
+        node_add(NORMAL, "select_node_add"),
+        node_rm(NORMAL, "select_node_remove"),
+        virtual_node(NORMAL, "addnode"),
+        scale("scale", null),
+        rotate("rotate", null),
+        merge("crosshair", null),
+        lasso(NORMAL, "rope"),
+        merge_to_node("crosshair", "joinnode"),
         move(Cursor.MOVE_CURSOR);
 
Index: /trunk/src/org/openstreetmap/josm/actions/upload/FixDataHook.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/FixDataHook.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/FixDataHook.java	(revision 11913)
@@ -27,4 +27,6 @@
 public class FixDataHook implements UploadHook {
 
+    private static final String ONEWAY = "oneway";
+
     /**
      * List of checks to run on data
@@ -40,8 +42,8 @@
         deprecated.add(new FixDataKey("color",            "colour"));
         deprecated.add(new FixDataTag("highway", "ford",  "ford",    "yes"));
-        deprecated.add(new FixDataTag("oneway",  "false", "oneway",  "no"));
-        deprecated.add(new FixDataTag("oneway",  "0",     "oneway",  "no"));
-        deprecated.add(new FixDataTag("oneway",  "true",  "oneway",  "yes"));
-        deprecated.add(new FixDataTag("oneway",  "1",     "oneway",  "yes"));
+        deprecated.add(new FixDataTag(ONEWAY,    "false",  ONEWAY,   "no"));
+        deprecated.add(new FixDataTag(ONEWAY,    "0",      ONEWAY,   "no"));
+        deprecated.add(new FixDataTag(ONEWAY,    "true",   ONEWAY,   "yes"));
+        deprecated.add(new FixDataTag(ONEWAY,    "1",      ONEWAY,   "yes"));
         deprecated.add(new FixDataTag("highway", "stile", "barrier", "stile"));
         // CHECKSTYLE.ON: SingleSpaceSeparator
Index: /trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 11913)
@@ -106,4 +106,6 @@
 public class Preferences {
 
+    private static final String COLOR_PREFIX = "color.";
+
     private static final String[] OBSOLETE_PREF_KEYS = {
       "hdop.factor", /* remove entry after April 2017 */
@@ -501,5 +503,5 @@
         final Map<String, String> all = new TreeMap<>();
         for (final Entry<String, Setting<?>> e : defaultsMap.entrySet()) {
-            if (e.getKey().startsWith("color.") && e.getValue() instanceof StringSetting) {
+            if (e.getKey().startsWith(COLOR_PREFIX) && e.getValue() instanceof StringSetting) {
                 StringSetting d = (StringSetting) e.getValue();
                 if (d.getValue() != null) {
@@ -509,5 +511,5 @@
         }
         for (final Entry<String, Setting<?>> e : settingsMap.entrySet()) {
-            if (e.getKey().startsWith("color.") && (e.getValue() instanceof StringSetting)) {
+            if (e.getKey().startsWith(COLOR_PREFIX) && (e.getValue() instanceof StringSetting)) {
                 all.put(e.getKey().substring(6), ((StringSetting) e.getValue()).getValue());
             }
@@ -864,5 +866,5 @@
         String colKey = ColorProperty.getColorKey(colName);
         registerColor(colKey, colName);
-        String colStr = specName != null ? get("color."+specName) : "";
+        String colStr = specName != null ? get(COLOR_PREFIX+specName) : "";
         if (colStr.isEmpty()) {
             colStr = get(colKey, ColorHelper.color2html(def, true));
@@ -888,5 +890,5 @@
 
     public synchronized Color getDefaultColor(String colKey) {
-        StringSetting col = Utils.cast(defaultsMap.get("color."+colKey), StringSetting.class);
+        StringSetting col = Utils.cast(defaultsMap.get(COLOR_PREFIX+colKey), StringSetting.class);
         String colStr = col == null ? null : col.getValue();
         return colStr == null || colStr.isEmpty() ? null : ColorHelper.html2color(colStr);
@@ -894,5 +896,5 @@
 
     public synchronized boolean putColor(String colKey, Color val) {
-        return put("color."+colKey, val != null ? ColorHelper.color2html(val, true) : null);
+        return put(COLOR_PREFIX+colKey, val != null ? ColorHelper.color2html(val, true) : null);
     }
 
@@ -1532,7 +1534,7 @@
     private void migrateOldColorKeys() {
         settingsMap.keySet().stream()
-                .filter(key -> key.startsWith("color."))
+                .filter(key -> key.startsWith(COLOR_PREFIX))
                 .flatMap(key -> {
-                    final String newKey = ColorProperty.getColorKey(key.substring("color.".length()));
+                    final String newKey = ColorProperty.getColorKey(key.substring(COLOR_PREFIX.length()));
                     return key.equals(newKey) || settingsMap.containsKey(newKey)
                             ? Stream.empty()
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/CrossingWays.java	(revision 11913)
@@ -32,7 +32,7 @@
     protected static final int CROSSING_WAYS = 601;
 
-    private static final String HIGHWAY = "highway";
-    private static final String RAILWAY = "railway";
-    private static final String WATERWAY = "waterway";
+    static final String HIGHWAY = "highway";
+    static final String RAILWAY = "railway";
+    static final String WATERWAY = "waterway";
 
     /** All way segments, grouped by cells */
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/DuplicateNode.java	(revision 11913)
@@ -2,4 +2,7 @@
 package org.openstreetmap.josm.data.validation.tests;
 
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.HIGHWAY;
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.RAILWAY;
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.WATERWAY;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -99,5 +102,5 @@
 
     private static final String[] TYPES = {
-            "none", "highway", "railway", "waterway", "boundary", "power", "natural", "landuse", "building"};
+            "none", HIGHWAY, RAILWAY, WATERWAY, "boundary", "power", "natural", "landuse", "building"};
 
     /** The map of potential duplicates.
@@ -210,15 +213,15 @@
                             .primitives(primitives)
                             .build());
-                } else if (typeMap.get("highway")) {
+                } else if (typeMap.get(HIGHWAY)) {
                     errors.add(TestError.builder(parentTest, Severity.ERROR, DUPLICATE_NODE_HIGHWAY)
                             .message(tr("Highway duplicated nodes"))
                             .primitives(primitives)
                             .build());
-                } else if (typeMap.get("railway")) {
+                } else if (typeMap.get(RAILWAY)) {
                     errors.add(TestError.builder(parentTest, Severity.ERROR, DUPLICATE_NODE_RAILWAY)
                             .message(tr("Railway duplicated nodes"))
                             .primitives(primitives)
                             .build());
-                } else if (typeMap.get("waterway")) {
+                } else if (typeMap.get(WATERWAY)) {
                     errors.add(TestError.builder(parentTest, Severity.ERROR, DUPLICATE_NODE_WATERWAY)
                             .message(tr("Waterway duplicated nodes"))
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java	(revision 11913)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.validation.tests;
 
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.HIGHWAY;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -77,5 +78,6 @@
         if (n.isUsable()) {
             if (!n.hasTag("crossing", "no")
-             && !(n.hasKey("crossing") && (n.hasTag("highway", "crossing") || n.hasTag("highway", "traffic_signals")))
+             && !(n.hasKey("crossing") && (n.hasTag(HIGHWAY, "crossing")
+                                        || n.hasTag(HIGHWAY, "traffic_signals")))
              && n.isReferredByWays(2)) {
                 testMissingPedestrianCrossing(n);
@@ -92,5 +94,5 @@
     public void visit(Way w) {
         if (w.isUsable()) {
-            if (w.isClosed() && w.hasTag("highway", CLASSIFIED_HIGHWAYS) && w.hasTag("junction", "roundabout")) {
+            if (w.isClosed() && w.hasTag(HIGHWAY, CLASSIFIED_HIGHWAYS) && w.hasTag("junction", "roundabout")) {
                 // TODO: find out how to handle splitted roundabouts (see #12841)
                 testWrongRoundabout(w);
@@ -110,5 +112,5 @@
         for (Node n : new HashSet<>(w.getNodes())) {
             for (Way h : Utils.filteredCollection(n.getReferrers(), Way.class)) {
-                String value = h.get("highway");
+                String value = h.get(HIGHWAY);
                 if (h != w && value != null && !value.endsWith("_link")) {
                     List<Way> list = map.get(value);
@@ -130,10 +132,10 @@
                 if (list.size() > 2 || oneway1 == null || oneway2 == null || !oneway1 || !oneway2) {
                     // Error when the highway tags do not match
-                    String value = w.get("highway");
+                    String value = w.get(HIGHWAY);
                     if (!value.equals(s)) {
                         errors.add(TestError.builder(this, Severity.WARNING, WRONG_ROUNDABOUT_HIGHWAY)
                                 .message(tr("Incorrect roundabout (highway: {0} instead of {1})", value, s))
                                 .primitives(w)
-                                .fix(() -> new ChangePropertyCommand(w, "highway", s))
+                                .fix(() -> new ChangePropertyCommand(w, HIGHWAY, s))
                                 .build());
                     }
@@ -145,5 +147,5 @@
 
     public static boolean isHighwayLinkOkay(final Way way) {
-        final String highway = way.get("highway");
+        final String highway = way.get(HIGHWAY);
         if (highway == null || !highway.endsWith("_link")
                 || !IN_DOWNLOADED_AREA.test(way.getNode(0)) || !IN_DOWNLOADED_AREA.test(way.getNode(way.getNodesCount()-1))) {
@@ -164,5 +166,5 @@
 
         return Utils.filteredCollection(referrers, Way.class).stream().anyMatch(
-                otherWay -> !way.equals(otherWay) && otherWay.hasTag("highway", highway, highway.replaceAll("_link$", "")));
+                otherWay -> !way.equals(otherWay) && otherWay.hasTag(HIGHWAY, highway, highway.replaceAll("_link$", "")));
     }
 
@@ -185,5 +187,5 @@
 
         for (Way w : OsmPrimitive.getFilteredList(n.getReferrers(), Way.class)) {
-            String highway = w.get("highway");
+            String highway = w.get(HIGHWAY);
             if (highway != null) {
                 if ("footway".equals(highway) || "path".equals(highway)) {
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/OverlappingWays.java	(revision 11913)
@@ -2,4 +2,6 @@
 package org.openstreetmap.josm.data.validation.tests;
 
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.HIGHWAY;
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.RAILWAY;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -90,7 +92,7 @@
 
                 for (WaySegment ws : duplicated) {
-                    if (ws.way.hasKey("highway")) {
+                    if (ws.way.hasKey(HIGHWAY)) {
                         highway++;
-                    } else if (ws.way.hasKey("railway")) {
+                    } else if (ws.way.hasKey(RAILWAY)) {
                         railway++;
                     }
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/UnconnectedWays.java	(revision 11913)
@@ -2,4 +2,6 @@
 package org.openstreetmap.josm.data.validation.tests;
 
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.HIGHWAY;
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.RAILWAY;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -57,5 +59,5 @@
         @Override
         public boolean isPrimitiveUsable(OsmPrimitive p) {
-            return super.isPrimitiveUsable(p) && p.hasKey("highway");
+            return super.isPrimitiveUsable(p) && p.hasKey(HIGHWAY);
         }
     }
@@ -181,7 +183,7 @@
                         continue;
                     }
-                    if (en.hasTag("highway", "turning_circle", "bus_stop")
+                    if (en.hasTag(HIGHWAY, "turning_circle", "bus_stop")
                             || en.hasTag("amenity", "parking_entrance")
-                            || en.hasTag("railway", "buffer_stop")
+                            || en.hasTag(RAILWAY, "buffer_stop")
                             || en.isKeyTrue("noexit")
                             || en.hasKey("entrance", "barrier")) {
@@ -302,6 +304,6 @@
         MyWaySegment(Way w, Node n1, Node n2) {
             this.w = w;
-            String railway = w.get("railway");
-            String highway = w.get("highway");
+            String railway = w.get(RAILWAY);
+            String highway = w.get(HIGHWAY);
             this.isAbandoned = "abandoned".equals(railway) || w.isKeyTrue("disused");
             this.highway = (highway != null || railway != null) && !isAbandoned;
@@ -449,9 +451,9 @@
                 && !w.hasKey("addr:interpolation")
                 // similarly for public transport platforms
-                && !w.hasTag("highway", "platform") && !w.hasTag("railway", "platform")
+                && !w.hasTag(HIGHWAY, "platform") && !w.hasTag(RAILWAY, "platform")
                 ) {
             ways.addAll(getWaySegments(w));
             QuadBuckets<Node> set = endnodes;
-            if (w.hasKey("highway", "railway")) {
+            if (w.hasKey(HIGHWAY, RAILWAY)) {
                 set = endnodesHighway;
             }
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/UntaggedWay.java	(revision 11913)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.validation.tests;
 
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.HIGHWAY;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -81,5 +82,5 @@
         Map<String, String> tags = w.getKeys();
         if (!tags.isEmpty()) {
-            String highway = tags.get("highway");
+            String highway = tags.get(HIGHWAY);
             if (highway != null && NAMED_WAYS.contains(highway) && !tags.containsKey("name") && !tags.containsKey("ref")
                     && !"yes".equals(tags.get("noname"))) {
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/WayConnectedToArea.java	(revision 11913)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.validation.tests;
 
+import static org.openstreetmap.josm.data.validation.tests.CrossingWays.HIGHWAY;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -30,5 +31,5 @@
     @Override
     public void visit(Way w) {
-        if (!w.isUsable() || w.isClosed() || !w.hasKey("highway")) {
+        if (!w.isUsable() || w.isClosed() || !w.hasKey(HIGHWAY)) {
             return;
         }
@@ -37,5 +38,5 @@
         List<OsmPrimitive> r = w.firstNode().getReferrers();
         for (OsmPrimitive p : r) {
-            if (p != w && p.hasKey("highway")) {
+            if (p != w && p.hasKey(HIGHWAY)) {
                 hasway = true;
                 break;
@@ -50,5 +51,5 @@
         r = w.lastNode().getReferrers();
         for (OsmPrimitive p : r) {
-            if (p != w && p.hasKey("highway")) {
+            if (p != w && p.hasKey(HIGHWAY)) {
                 hasway = true;
                 break;
@@ -86,5 +87,5 @@
     private void addPossibleError(Way w, Node wayNode, OsmPrimitive p, OsmPrimitive area) {
         // Avoid "legal" cases (see #10655)
-        if (w.hasKey("highway") && wayNode.hasTag("leisure", "slipway") && area.hasTag("natural", "water")) {
+        if (w.hasKey(HIGHWAY) && wayNode.hasTag("leisure", "slipway") && area.hasTag("natural", "water")) {
             return;
         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/layer/LayerVisibilityAction.java	(revision 11913)
@@ -40,4 +40,5 @@
  */
 public final class LayerVisibilityAction extends AbstractAction implements IEnabledStateUpdating, LayerAction {
+    private static final String DIALOGS_LAYERLIST = "dialogs/layerlist";
     private static final int SLIDER_STEPS = 100;
     /**
@@ -70,5 +71,5 @@
         content.setLayout(new GridBagLayout());
 
-        new ImageProvider("dialogs/layerlist", "visibility").getResource().attachImageIcon(this, true);
+        new ImageProvider(DIALOGS_LAYERLIST, "visibility").getResource().attachImageIcon(this, true);
         putValue(SHORT_DESCRIPTION, tr("Change visibility of the selected layer."));
 
@@ -317,5 +318,5 @@
         @Override
         public ImageIcon getIcon() {
-            return ImageProvider.get("dialogs/layerlist", "transparency");
+            return ImageProvider.get(DIALOGS_LAYERLIST, "transparency");
         }
 
@@ -355,5 +356,5 @@
         @Override
         public ImageIcon getIcon() {
-           return ImageProvider.get("dialogs/layerlist", "gamma");
+           return ImageProvider.get(DIALOGS_LAYERLIST, "gamma");
         }
 
@@ -413,5 +414,5 @@
         @Override
         public ImageIcon getIcon() {
-           return ImageProvider.get("dialogs/layerlist", "sharpness");
+           return ImageProvider.get(DIALOGS_LAYERLIST, "sharpness");
         }
 
@@ -450,5 +451,5 @@
         @Override
         public ImageIcon getIcon() {
-           return ImageProvider.get("dialogs/layerlist", "colorfulness");
+           return ImageProvider.get(DIALOGS_LAYERLIST, "colorfulness");
         }
 
Index: /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 11912)
+++ /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 11913)
@@ -98,4 +98,9 @@
 
     private static class Parser extends DefaultHandler {
+        private static final String MAX_ZOOM = "max-zoom";
+        private static final String MIN_ZOOM = "min-zoom";
+        private static final String TILE_SIZE = "tile-size";
+        private static final String TRUE = "true";
+
         private StringBuilder accumulator = new StringBuilder();
 
@@ -155,5 +160,5 @@
                     metadataHeaders = new HashMap<>();
                     String best = atts.getValue("eli-best");
-                    if ("true".equals(best)) {
+                    if (TRUE.equals(best)) {
                         entry.setBestMarked(true);
                     }
@@ -164,7 +169,7 @@
                         "type",
                         "url",
-                        "min-zoom",
-                        "max-zoom",
-                        "tile-size",
+                        MIN_ZOOM,
+                        MAX_ZOOM,
+                        TILE_SIZE,
                 }).contains(qName)) {
                     newState = State.MIRROR_ATTRIBUTE;
@@ -184,6 +189,6 @@
                         "url",
                         "eula",
-                        "min-zoom",
-                        "max-zoom",
+                        MIN_ZOOM,
+                        MAX_ZOOM,
                         "attribution-text",
                         "attribution-url",
@@ -195,5 +200,5 @@
                         "icon",
                         "date",
-                        "tile-size",
+                        TILE_SIZE,
                         "valid-georeference",
                 }).contains(qName)) {
@@ -264,5 +269,5 @@
             }
             states.push(newState);
-            if (newState == State.UNKNOWN && "true".equals(atts.getValue("mandatory"))) {
+            if (newState == State.UNKNOWN && TRUE.equals(atts.getValue("mandatory"))) {
                 skipEntry = true;
             }
@@ -319,6 +324,6 @@
                         mirrorEntry.setUrl(accumulator.toString());
                         break;
-                    case "min-zoom":
-                    case "max-zoom":
+                    case MIN_ZOOM:
+                    case MAX_ZOOM:
                         Integer val = null;
                         try {
@@ -330,5 +335,5 @@
                             mirrorEntry = null;
                         } else {
-                            if ("min-zoom".equals(qName)) {
+                            if (MIN_ZOOM.equals(qName)) {
                                 mirrorEntry.setDefaultMinZoom(val);
                             } else {
@@ -337,5 +342,5 @@
                         }
                         break;
-                    case "tile-size":
+                    case TILE_SIZE:
                         Integer tileSize = null;
                         try {
@@ -383,5 +388,5 @@
                 case "default":
                     switch (accumulator.toString()) {
-                    case "true":
+                    case TRUE:
                         entry.setDefaultEntry(true);
                         break;
@@ -399,6 +404,6 @@
                     entry.setEulaAcceptanceRequired(accumulator.toString());
                     break;
-                case "min-zoom":
-                case "max-zoom":
+                case MIN_ZOOM:
+                case MAX_ZOOM:
                     Integer val = null;
                     try {
@@ -410,5 +415,5 @@
                         skipEntry = true;
                     } else {
-                        if ("min-zoom".equals(qName)) {
+                        if (MIN_ZOOM.equals(qName)) {
                             entry.setDefaultMinZoom(val);
                         } else {
@@ -441,5 +446,5 @@
                     entry.setIcon(accumulator.toString());
                     break;
-                case "tile-size":
+                case TILE_SIZE:
                     Integer tileSize = null;
                     try {
