Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 15907)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 15908)
@@ -59,4 +59,5 @@
 import org.openstreetmap.josm.command.Command;
 import org.openstreetmap.josm.data.UndoRedoHandler;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.AbstractPrimitive;
 import org.openstreetmap.josm.data.osm.DataSelectionListener;
@@ -370,11 +371,11 @@
         destroyTaginfoNationalActions();
         if (!newSel.isEmpty()) {
-            Territories.getRegionalTaginfoUrls(
-                    newSel.iterator().next().getBBox().getCenter()).values().stream().flatMap(List::stream).forEach(
-                taginfo -> taginfoNationalActions.add(new TaginfoAction(tagTable, editHelper::getDataKey, editHelper::getDataValues,
-                        membershipTable, x -> (IRelation<?>) membershipData.getValueAt(x, 0),
-                        taginfo.getUrl(), String.join("/", taginfo.getIsoCodes())
-                            + (taginfo.getSuffix() == null ? "" : " (" + taginfo.getSuffix() + ")")))
-            );
+            final LatLon center = newSel.iterator().next().getBBox().getCenter();
+            Territories.getRegionalTaginfoUrls(center)
+                    .map(taginfo -> new TaginfoAction(
+                            tagTable, editHelper::getDataKey, editHelper::getDataValues,
+                            membershipTable, x -> (IRelation<?>) membershipData.getValueAt(x, 0), taginfo.getUrl(),
+                            String.join("/", taginfo.getIsoCodes()) + (taginfo.getSuffix() == null ? "" : " (" + taginfo.getSuffix() + ")"))
+                    ).forEach(taginfoNationalActions::add);
             taginfoNationalActions.stream().map(membershipMenu::add).forEach(membershipMenuTagInfoNatItems::add);
             taginfoNationalActions.stream().map(tagMenu::add).forEach(tagMenuTagInfoNatItems::add);
Index: trunk/src/org/openstreetmap/josm/tools/Territories.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/Territories.java	(revision 15907)
+++ trunk/src/org/openstreetmap/josm/tools/Territories.java	(revision 15908)
@@ -7,16 +7,15 @@
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Optional;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import javax.json.Json;
@@ -199,23 +198,19 @@
 
     /**
-     * Returns a map of regional taginfo instances for the given location.
+     * Returns regional taginfo instances for the given location.
      * @param ll lat/lon where to look.
-     * @return a map of regional taginfo instances for the given location (code / url)
+     * @return regional taginfo instances for the given location (code / url)
      * @since 15876
      */
-    public static Map<String, List<TaginfoRegionalInstance>> getRegionalTaginfoUrls(LatLon ll) {
-        Map<String, List<TaginfoRegionalInstance>> result = new TreeMap<>();
-        if (iso3166Cache != null) {
-            for (String code : iso3166Cache.entrySet().parallelStream().distinct()
+    public static Stream<TaginfoRegionalInstance> getRegionalTaginfoUrls(LatLon ll) {
+        if (iso3166Cache == null) {
+            return Stream.empty();
+        }
+        return iso3166Cache.entrySet().parallelStream().distinct()
                 .filter(e -> Boolean.TRUE.equals(e.getValue().get(ll)))
                 .map(Entry<String, GeoPropertyIndex<Boolean>>::getKey)
-                .collect(Collectors.toSet())) {
-                for (Map<String, TaginfoRegionalInstance> cache : Arrays.asList(taginfoCache, taginfoGeofabrikCache)) {
-                    Optional.ofNullable(cache.get(code)).ifPresent(
-                            taginfo -> result.computeIfAbsent(code, c -> new ArrayList<>()).add(taginfo));
-                }
-            }
-        }
-        return result;
+                .distinct()
+                .flatMap(code -> Stream.of(taginfoCache, taginfoGeofabrikCache).map(cache -> cache.get(code)))
+                .filter(Objects::nonNull);
     }
 }
