Index: /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 17094)
+++ /trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java	(revision 17095)
@@ -11,4 +11,5 @@
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Stack;
 import java.util.concurrent.ConcurrentHashMap;
@@ -28,4 +29,5 @@
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.MultiMap;
+import org.openstreetmap.josm.tools.StringParser;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.XmlUtils;
@@ -362,13 +364,10 @@
                     switch(qName) {
                     case "type":
-                        boolean found = false;
-                        for (ImageryType type : ImageryType.values()) {
-                            if (Objects.equals(accumulator.toString(), type.getTypeString())) {
-                                mirrorEntry.setImageryType(type);
-                                found = true;
-                                break;
-                            }
-                        }
-                        if (!found) {
+                        Optional<ImageryType> type = Arrays.stream(ImageryType.values())
+                                .filter(t -> Objects.equals(accumulator.toString(), t.getTypeString()))
+                                .findFirst();
+                        if (type.isPresent()) {
+                            mirrorEntry.setImageryType(type.get());
+                        } else {
                             mirrorEntry = null;
                         }
@@ -385,31 +384,21 @@
                     case MIN_ZOOM:
                     case MAX_ZOOM:
-                        Integer val = null;
-                        try {
-                            val = Integer.valueOf(accumulator.toString());
-                        } catch (NumberFormatException e) {
-                            val = null;
-                        }
-                        if (val == null) {
+                        Optional<Integer> zoom = tryParseInt();
+                        if (!zoom.isPresent()) {
                             mirrorEntry = null;
                         } else {
                             if (MIN_ZOOM.equals(qName)) {
-                                mirrorEntry.setDefaultMinZoom(val);
+                                mirrorEntry.setDefaultMinZoom(zoom.get());
                             } else {
-                                mirrorEntry.setDefaultMaxZoom(val);
+                                mirrorEntry.setDefaultMaxZoom(zoom.get());
                             }
                         }
                         break;
                     case TILE_SIZE:
-                        Integer tileSize = null;
-                        try {
-                            tileSize = Integer.valueOf(accumulator.toString());
-                        } catch (NumberFormatException e) {
-                            tileSize = null;
-                        }
-                        if (tileSize == null) {
+                        Optional<Integer> tileSize = tryParseInt();
+                        if (!tileSize.isPresent()) {
                             mirrorEntry = null;
                         } else {
-                            entry.setTileSize(tileSize.intValue());
+                            entry.setTileSize(tileSize.get());
                         }
                         break;
@@ -462,17 +451,12 @@
                 case MIN_ZOOM:
                 case MAX_ZOOM:
-                    Integer val = null;
-                    try {
-                        val = Integer.valueOf(accumulator.toString());
-                    } catch (NumberFormatException e) {
-                        val = null;
-                    }
-                    if (val == null) {
+                    Optional<Integer> zoom = tryParseInt();
+                    if (!zoom.isPresent()) {
                         skipEntry = true;
                     } else {
                         if (MIN_ZOOM.equals(qName)) {
-                            entry.setDefaultMinZoom(val);
+                            entry.setDefaultMinZoom(zoom.get());
                         } else {
-                            entry.setDefaultMaxZoom(val);
+                            entry.setDefaultMaxZoom(zoom.get());
                         }
                     }
@@ -509,14 +493,9 @@
                     break;
                 case TILE_SIZE:
-                    Integer tileSize = null;
-                    try {
-                        tileSize = Integer.valueOf(accumulator.toString());
-                    } catch (NumberFormatException e) {
-                        tileSize = null;
-                    }
-                    if (tileSize == null) {
+                    Optional<Integer> tileSize = tryParseInt();
+                    if (!tileSize.isPresent()) {
                         skipEntry = true;
                     } else {
-                        entry.setTileSize(tileSize.intValue());
+                        entry.setTileSize(tileSize.get());
                     }
                     break;
@@ -573,4 +552,8 @@
         private ImageryBounds intern(ImageryBounds imageryBounds) {
             return boundsInterner.computeIfAbsent(imageryBounds, ignore -> imageryBounds);
+        }
+
+        private Optional<Integer> tryParseInt() {
+            return StringParser.DEFAULT.tryParse(Integer.class, accumulator.toString());
         }
     }
