Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 15788)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmChangeTask.java	(revision 15789)
@@ -10,4 +10,5 @@
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Optional;
 import java.util.concurrent.Future;
 import java.util.concurrent.RejectedExecutionException;
@@ -65,6 +66,5 @@
     @Override
     public Future<?> loadUrl(DownloadParams settings, final String url, ProgressMonitor progressMonitor) {
-        OsmChangeUrlPattern urlPattern = Arrays.stream(OsmChangeUrlPattern.values()).filter(p -> p.matches(url)).findFirst()
-                .orElseThrow(() -> new IllegalArgumentException("URL does not match any OSM URL pattern: " + url));
+        Optional<OsmChangeUrlPattern> urlPattern = Arrays.stream(OsmChangeUrlPattern.values()).filter(p -> p.matches(url)).findFirst();
         String newUrl = url;
         final Matcher matcher = OsmChangeUrlPattern.OSM_WEBSITE.matcher(url);
@@ -75,5 +75,5 @@
                 Compression.byExtension(newUrl));
         // Extract .osc filename from URL to set the new layer name
-        extractOsmFilename(settings, urlPattern.pattern(), newUrl);
+        extractOsmFilename(settings, urlPattern.orElse(OsmChangeUrlPattern.EXTERNAL_OSC_FILE).pattern(), newUrl);
         return MainApplication.worker.submit(downloadTask);
     }
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 15788)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 15789)
@@ -159,10 +159,9 @@
     public Future<?> loadUrl(DownloadParams settings, String url, ProgressMonitor progressMonitor) {
         String newUrl = modifyUrlBeforeLoad(url);
-        OsmUrlPattern urlPattern = Arrays.stream(OsmUrlPattern.values()).filter(p -> p.matches(newUrl)).findFirst()
-                .orElseThrow(() -> new IllegalArgumentException("URL does not match any OSM URL pattern: " + newUrl));
+        Optional<OsmUrlPattern> urlPattern = Arrays.stream(OsmUrlPattern.values()).filter(p -> p.matches(newUrl)).findFirst();
         downloadTask = new DownloadTask(settings, getOsmServerReader(newUrl), progressMonitor, true, Compression.byExtension(newUrl));
         currentBounds = null;
         // Extract .osm filename from URL to set the new layer name
-        extractOsmFilename(settings, urlPattern.pattern(), newUrl);
+        extractOsmFilename(settings, urlPattern.orElse(OsmUrlPattern.EXTERNAL_OSM_FILE).pattern(), newUrl);
         return MainApplication.worker.submit(downloadTask);
     }
@@ -190,5 +189,5 @@
         if (newLayerName == null || newLayerName.isEmpty()) {
             Matcher matcher = Pattern.compile(pattern).matcher(url);
-            newLayerName = matcher.matches() ? matcher.group(1) : null;
+            newLayerName = matcher.matches() && matcher.groupCount() > 0 ? matcher.group(1) : null;
         }
     }
