Index: src/org/openstreetmap/josm/io/GeoJSONReader.java
===================================================================
--- src/org/openstreetmap/josm/io/GeoJSONReader.java	(revision 16846)
+++ src/org/openstreetmap/josm/io/GeoJSONReader.java	(working copy)
@@ -3,7 +3,12 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -51,6 +56,8 @@
     private static final String PROPERTIES = "properties";
     private static final String GEOMETRY = "geometry";
     private static final String TYPE = "type";
+    /** The record separator is 0x1E per RFC 7464 */
+    private static final byte RECORD_SEPARATOR_BYTE = 0x1E;
     private JsonParser parser;
     private Projection projection = Projections.getProjectionByCode("EPSG:4326"); // WGS 84
 
@@ -350,14 +357,56 @@
         return tags;
     }
 
+    /**
+     * Check if the inputstream follows RFC 7464
+     * @param source The source to check (should be at the beginning)
+     * @return {@code true} if the initial character is {@link GeoJSONReader#RECORD_SEPARATOR_BYTE}.
+     */
+    private static boolean isLineDelimited(InputStream source) {
+        source.mark(2);
+        try {
+            int start = source.read();
+            if (RECORD_SEPARATOR_BYTE == start) {
+                return true;
+            }
+            source.reset();
+        } catch (IOException e) {
+            Logging.error(e);
+        }
+        return false;
+    }
+
     @Override
     protected DataSet doParseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException {
-        setParser(Json.createParser(source));
         ds.setUploadPolicy(UploadPolicy.DISCOURAGED);
-        try {
-            parse();
-        } catch (JsonParsingException e) {
-            throw new IllegalDataException(e);
+        if (isLineDelimited(source)) {
+            BufferedReader reader = new BufferedReader(new InputStreamReader(source));
+            String line = null;
+            String rs = new String(new byte[]{RECORD_SEPARATOR_BYTE}, StandardCharsets.US_ASCII);
+            try {
+                while ((line = reader.readLine()) != null) {
+                    line = line.replaceFirst(rs, "");
+                    InputStream is = new ByteArrayInputStream(line.getBytes());
+                    setParser(Json.createParser(is));
+                    try {
+                        parse();
+                    } catch (JsonParsingException e) {
+                        throw new IllegalDataException(e);
+                    } finally {
+                        is.close();
+                        parser.close();
+                    }
+                }
+            } catch (IOException e) {
+                throw new IllegalDataException(e);
+            }
+        } else {
+            setParser(Json.createParser(source));
+            try {
+                parse();
+            } catch (JsonParsingException e) {
+                throw new IllegalDataException(e);
+            }
         }
         return getDataSet();
     }
