Index: /applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/level0l/Level0LParser.jj
===================================================================
--- /applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/level0l/Level0LParser.jj	(revision 35284)
+++ /applications/editors/josm/plugins/comfort0/src/net/simon04/comfort0/level0l/Level0LParser.jj	(revision 35285)
@@ -46,4 +46,5 @@
     | <EQ: "=" > : VALUE
     | <IDENT: ["a"-"z", "A"-"Z", "_"] (["a"-"z", "A"-"Z", "_", "-", "0"-"9"])* >
+    | <D_COMMENT_START: "#"> : COMMENT
 }
 
@@ -69,13 +70,45 @@
     lon=<FLOAT>
     { r.setCoor(new LatLon(Double.parseDouble(lat.image), Double.parseDouble(lon.image))); }
-    (<COMMENT_START> | <H_EOL>)
-    tags(r)
+    ( <COMMENT_START> | <H_EOL> )
+    ( tag(r) )*
     { return r; }
 }
 
-void tags(PrimitiveData r):
+WayData way():
+{
+    WayData r;
+    Token id;
+}
+{
+    <WAY>
+    { r = new WayData(); }
+    id=<H_ID>
+    { r.setId(Long.parseLong(id.image)); }
+    ( <COMMENT_START> | <H_EOL> )
+    way_data(r)
+    { return r; }
+}
+
+void way_data(WayData r):
 {}
 {
+    LOOKAHEAD(3)
+    ( way_node(r) way_data(r) ) // TODO avoid recursive call to way_data
+    |
     ( tag(r) )*
+}
+
+void way_node(WayData r):
+{
+    Token id;
+}
+{
+    <D_SPACE> <D_SPACE>
+    <ND>
+    ( <D_SPACE> )+
+    id=<D_ID>
+    { r.getNodeIds().add(Long.parseLong(id.image)); }
+    ( <D_SPACE> )*
+    ( <D_COMMENT_START> | <D_EOL> )
 }
 
Index: /applications/editors/josm/plugins/comfort0/test/unit/net/simon04/comfort0/level0l/parsergen/Level0LParserTest.java
===================================================================
--- /applications/editors/josm/plugins/comfort0/test/unit/net/simon04/comfort0/level0l/parsergen/Level0LParserTest.java	(revision 35284)
+++ /applications/editors/josm/plugins/comfort0/test/unit/net/simon04/comfort0/level0l/parsergen/Level0LParserTest.java	(revision 35285)
@@ -8,4 +8,5 @@
 import org.junit.Test;
 import org.openstreetmap.josm.data.osm.NodeData;
+import org.openstreetmap.josm.data.osm.WayData;
 
 public class Level0LParserTest {
@@ -24,3 +25,23 @@
         assertThat(node.getKeys().get("traffic_sign"), is("city_limit"));
     }
+
+    @Test
+    public void testWay() throws Exception {
+        final String level0l = "" +
+                "way 26659127\n" +
+                "  nd 292403538\n" +
+                "  nd 298884289\n" +
+                "  nd 261728686\n" +
+                "  highway = unclassified\n" +
+                "  name = Pastower Straße\n";
+        final WayData way = new Level0LParser(new StringReader(level0l)).way();
+        assertThat(way.getId(), is(26659127L));
+        assertThat(way.getNodesCount(), is(3));
+        assertThat(way.getNodeId(0), is(292403538L));
+        assertThat(way.getNodeId(1), is(298884289L));
+        assertThat(way.getNodeId(2), is(261728686L));
+        assertThat(way.getKeys().size(), is(2));
+        assertThat(way.getKeys().get("highway"), is("unclassified"));
+        assertThat(way.getKeys().get("name"), is("Pastower Straße"));
+    }
 }
