Index: trunk/src/org/openstreetmap/josm/gui/io/importexport/ImageImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/importexport/ImageImporter.java	(revision 17557)
+++ trunk/src/org/openstreetmap/josm/gui/io/importexport/ImageImporter.java	(revision 17558)
@@ -9,7 +9,10 @@
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -20,4 +23,5 @@
 import org.openstreetmap.josm.gui.layer.geoimage.GeoImageLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.CachedFile;
 import org.openstreetmap.josm.io.IllegalDataException;
 
@@ -27,4 +31,10 @@
  */
 public class ImageImporter extends FileImporter {
+
+    /** Check if the filename starts with a borked path ({@link java.io.File#File} drops consecutive {@code /} characters). */
+    private static final Pattern URL_START_BAD = Pattern.compile("^(https?:/)([^/].*)$");
+    /** Check for the beginning of a "good" url */
+    private static final Pattern URL_START_GOOD = Pattern.compile("^https?://.*$");
+
     private GpxLayer gpx;
 
@@ -91,5 +101,5 @@
             List<File> files = new ArrayList<>();
             Set<String> visitedDirs = new HashSet<>();
-            addRecursiveFiles(files, visitedDirs, sel, progressMonitor.createSubTaskMonitor(1, true));
+            addRecursiveFiles(this.options, files, visitedDirs, sel, progressMonitor.createSubTaskMonitor(1, true));
 
             if (progressMonitor.isCanceled())
@@ -107,5 +117,9 @@
     static void addRecursiveFiles(List<File> files, Set<String> visitedDirs, List<File> sel, ProgressMonitor progressMonitor)
             throws IOException {
+        addRecursiveFiles(EnumSet.noneOf(Options.class), files, visitedDirs, sel, progressMonitor);
+    }
 
+    static void addRecursiveFiles(Set<Options> options, List<File> files, Set<String> visitedDirs, List<File> sel,
+            ProgressMonitor progressMonitor) throws IOException {
         if (progressMonitor.isCanceled())
             return;
@@ -118,5 +132,6 @@
                         File[] dirFiles = f.listFiles(); // Can be null for some strange directories (like lost+found)
                         if (dirFiles != null) {
-                            addRecursiveFiles(files, visitedDirs, Arrays.asList(dirFiles), progressMonitor.createSubTaskMonitor(1, true));
+                            addRecursiveFiles(options, files, visitedDirs, Arrays.asList(dirFiles),
+                                    progressMonitor.createSubTaskMonitor(1, true));
                         }
                     } else {
@@ -124,5 +139,19 @@
                     }
                 } else {
-                    if (FILE_FILTER.accept(f)) {
+                    /* Check if the path is a web path, and if so, ensure that it is "correct" */
+                    final String path = f.getPath();
+                    Matcher matcherBad = URL_START_BAD.matcher(path);
+                    final String realPath;
+                    if (matcherBad.matches()) {
+                        realPath = matcherBad.replaceFirst(matcherBad.group(1) + "/" + matcherBad.group(2));
+                    } else {
+                        realPath = path;
+                    }
+                    if (URL_START_GOOD.matcher(realPath).matches() && FILE_FILTER.accept(f)
+                            && options.contains(Options.ALLOW_WEB_RESOURCES)) {
+                        try (CachedFile cachedFile = new CachedFile(realPath)) {
+                            files.add(cachedFile.getFile());
+                        }
+                    } else if (FILE_FILTER.accept(f)) {
                         files.add(f);
                     }
