Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java	(revision 33049)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java	(revision 33051)
@@ -6,7 +6,5 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
@@ -151,16 +149,17 @@
     private void parseFeatureMember(Component parent) throws XMLStreamException, GeoCrsException, FactoryException,
     UserCancelException, GeoMathTransformException, MismatchedDimensionException, TransformException {
-        List<OsmPrimitive> list = new ArrayList<>();
         Way way = null;
         Node node = null;
-        Map<String, String> tags = new HashMap<>();
+        Map<String, StringBuilder> tags = new HashMap<>();
+        OsmPrimitive prim = null;
+        String key = null;
         while (parser.hasNext()) {
             int event = parser.next();
             if (event == XMLStreamConstants.START_ELEMENT) {
                 if (isElement(GML_LINE_STRING)) {
-                    list.add(way = createWay());
+                    prim = way = createWay();
                     parseSrs(parent);
                 } else if (isElement(GML_LINEAR_RING)) {
-                    list.add(way = createWay());
+                    prim = way = createWay();
                 } else if (isElement(GML_POINT)) {
                     parseSrs(parent);
@@ -174,4 +173,6 @@
                         if (way != null) {
                             way.addNode(node);
+                        } else {
+                            prim = node;
                         }
                     }
@@ -179,5 +180,13 @@
                     String[] tab = parser.getElementText().trim().split(",");
                     Point p = geometryFactory.createPoint(new Coordinate(Double.valueOf(tab[0]), Double.valueOf(tab[1])));
-                    list.add(node = createOrGetNode(p));
+                    node = createOrGetNode(p);
+                    if (way == null) {
+                        prim = node;
+                    }
+                } else {
+                    key = parser.getLocalName();
+                    if (key.startsWith("ogr:")) {
+                        key = key.substring("ogr:".length());
+                    }
                 }
             } else if (event == XMLStreamConstants.END_ELEMENT) {
@@ -185,9 +194,16 @@
                     break;
                 }
-            }
-        }
-        for (OsmPrimitive p : list) {
-            for (String key : tags.keySet()) {
-                p.put(key, tags.get(key));
+            } else if (event == XMLStreamConstants.CHARACTERS && key != null) {
+                StringBuilder sb = tags.get(key);
+                if (sb == null) {
+                    sb = new StringBuilder();
+                    tags.put(key, sb);
+                }
+                sb.append(parser.getTextCharacters(), parser.getTextStart(), parser.getTextLength());
+            }
+        }
+        if (prim != null) {
+            for (String k : tags.keySet()) {
+                prim.put(k, tags.get(k).toString());
             }
         }
