Index: /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangePlugin.java
===================================================================
--- /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangePlugin.java	(revision 27399)
+++ /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangePlugin.java	(revision 27400)
@@ -13,4 +13,5 @@
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -162,5 +163,7 @@
                  HashMap<Long, HashMap<User, Severity>> userMap = ("node".equals(qName)) ? nodeUsers : ("way".equals(qName)) ? wayUsers : relationUsers;
                  // we always overwrite a list that might already exist
-                 userMap.put(Long.decode(atts.getValue("id")), theMap = new HashMap<User, Severity>());
+                 Long id = Long.decode(atts.getValue("id"));
+                 theMap = userMap.get(id);
+                 if (theMap == null) userMap.put(id, theMap = new HashMap<User, Severity>());
             }
             else if ("user".equals(qName))
@@ -197,18 +200,30 @@
             public void visit(Node n) {
                 if (!nodeUsers.containsKey(n.getId())) {
-                    nodesToLoad.append(",");
-                    nodesToLoad.append(n.getId());
+                    if ("clean".equals(n.get("odbl"))) {
+                        nodeUsers.put(new Long(n.getId()), new HashMap<User, Severity>(Collections.singletonMap(n.getUser(), Severity.CLEAN)));
+                    } else {
+                        nodesToLoad.append(",");
+                        nodesToLoad.append(n.getId());
+                    }
                 }
             }
             public void visit(Way n) {
                 if (!wayUsers.containsKey(n.getId())) {
-                    waysToLoad.append(",");
-                    waysToLoad.append(n.getId());
+                    if ("clean".equals(n.get("odbl"))) {
+                        wayUsers.put(new Long(n.getId()), new HashMap<User, Severity>(Collections.singletonMap(n.getUser(), Severity.CLEAN)));
+                    } else {
+                        waysToLoad.append(",");
+                        waysToLoad.append(n.getId());
+                    }
                 }
             }
             public void visit(Relation n) {
                 if (!relationUsers.containsKey(n.getId())) {
-                    relationsToLoad.append(",");
-                    relationsToLoad.append(n.getId());
+                    if ("clean".equals(n.get("odbl"))) {
+                        relationUsers.put(new Long(n.getId()), new HashMap<User, Severity>(Collections.singletonMap(n.getUser(), Severity.CLEAN)));
+                    } else {
+                        relationsToLoad.append(",");
+                        relationsToLoad.append(n.getId());
+                    }
                 }
             }
Index: /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangeVisitor.java
===================================================================
--- /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangeVisitor.java	(revision 27399)
+++ /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangeVisitor.java	(revision 27400)
@@ -10,5 +10,4 @@
 public interface LicenseChangeVisitor {
     void visit(OsmPrimitive p);
-    void visit(WaySegment ws);
     void visit(List<Node> nodes);
 }
Index: /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseProblem.java
===================================================================
--- /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseProblem.java	(revision 27399)
+++ /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseProblem.java	(revision 27400)
@@ -15,5 +15,4 @@
 import org.openstreetmap.josm.data.osm.Relation;
 import org.openstreetmap.josm.data.osm.Way;
-import org.openstreetmap.josm.data.osm.WaySegment;
 import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
 import org.openstreetmap.josm.gui.MapView;
@@ -126,6 +125,4 @@
             if (o instanceof OsmPrimitive)
                 v.visit((OsmPrimitive) o);
-            else if (o instanceof WaySegment)
-                v.visit((WaySegment) o);
             else if (o instanceof List<?>) {
                 v.visit((List<Node>)o);
@@ -169,10 +166,10 @@
             g.setColor(color);
             if (selected) {
-                g.fillOval(p.x - 5, p.y - 5, 10, 10);
+                g.fillOval(p.x - 6, p.y - 6, 12, 12);
             } else
-                g.drawOval(p.x - 5, p.y - 5, 10, 10);
-        }
-
-        public void drawSegment(Point p1, Point p2, Color color) {
+                g.drawOval(p.x - 6, p.y - 6, 12, 12);
+        }
+
+        public void drawSegment(Point p1, Point p2, boolean linecapStart, boolean linecapEnd, Color color) {
             g.setColor(color);
 
@@ -182,18 +179,18 @@
             int deg = (int) Math.toDegrees(t);
             if (selected) {
-                int[] x = new int[] { (int) (p1.x + 5 * cosT), (int) (p2.x + 5 * cosT), (int) (p2.x - 5 * cosT),
-                        (int) (p1.x - 5 * cosT) };
-                int[] y = new int[] { (int) (p1.y - 5 * sinT), (int) (p2.y - 5 * sinT), (int) (p2.y + 5 * sinT),
-                        (int) (p1.y + 5 * sinT) };
+                int[] x = new int[] { (int) (p1.x + 4 * cosT), (int) (p2.x + 4 * cosT), (int) (p2.x - 4 * cosT),
+                        (int) (p1.x - 4 * cosT) };
+                int[] y = new int[] { (int) (p1.y - 4 * sinT), (int) (p2.y - 4 * sinT), (int) (p2.y + 4 * sinT),
+                        (int) (p1.y + 4 * sinT) };
                 g.fillPolygon(x, y, 4);
-                g.fillArc(p1.x - 5, p1.y - 5, 10, 10, deg, 180);
-                g.fillArc(p2.x - 5, p2.y - 5, 10, 10, deg, -180);
+                if (linecapStart) g.fillArc(p1.x - 4, p1.y - 4, 8, 8, deg, 180);
+                if (linecapEnd) g.fillArc(p2.x - 4, p2.y - 4, 8, 8, deg, -180);
             } else {
-                g.drawLine((int) (p1.x + 5 * cosT), (int) (p1.y - 5 * sinT), (int) (p2.x + 5 * cosT),
-                        (int) (p2.y - 5 * sinT));
-                g.drawLine((int) (p1.x - 5 * cosT), (int) (p1.y + 5 * sinT), (int) (p2.x - 5 * cosT),
-                        (int) (p2.y + 5 * sinT));
-                g.drawArc(p1.x - 5, p1.y - 5, 10, 10, deg, 180);
-                g.drawArc(p2.x - 5, p2.y - 5, 10, 10, deg, -180);
+                g.drawLine((int) (p1.x + 4 * cosT), (int) (p1.y - 4 * sinT), (int) (p2.x + 4 * cosT),
+                        (int) (p2.y - 4 * sinT));
+                g.drawLine((int) (p1.x - 4 * cosT), (int) (p1.y + 4 * sinT), (int) (p2.x - 4 * cosT),
+                        (int) (p2.y + 4 * sinT));
+                if (linecapStart) g.drawArc(p1.x - 4, p1.y - 4, 8, 8, deg, 180);
+                if (linecapEnd) g.drawArc(p2.x - 4, p2.y - 4, 8, 8, deg, -180);
             }
         }
@@ -205,6 +202,6 @@
          * @param color The color
          */
-        public void drawSegment(Node n1, Node n2, Color color) {
-            drawSegment(mv.getPoint(n1), mv.getPoint(n2), color);
+        public void drawSegment(Node n1, Node n2, boolean linecapStart, boolean linecapEnd, Color color) {
+            drawSegment(mv.getPoint(n1), mv.getPoint(n2), linecapStart, linecapEnd, color);
         }
 
@@ -222,13 +219,4 @@
         public void visit(Way w) {
             visit(w.getNodes());
-        }
-
-        public void visit(WaySegment ws) {
-            if (ws.lowerIndex < 0 || ws.lowerIndex + 1 >= ws.way.getNodesCount())
-                return;
-            Node a = ws.way.getNodes().get(ws.lowerIndex), b = ws.way.getNodes().get(ws.lowerIndex + 1);
-            if (isSegmentVisible(a, b)) {
-                drawSegment(a, b, severity.getColor());
-            }
         }
 
@@ -269,15 +257,25 @@
 
         public void visit(List<Node> nodes) {
-            Node lastN = null;
+            Node[] window = new Node[4];
+            int index = 1;
+            window[0] = null;
             for (Node n : nodes) {
-                if (lastN == null) {
-                    lastN = n;
+                if (index == 1)
+                {
+                    window[1] = n;
+                    index = 2;
                     continue;
                 }
-                if (n.isDrawable() && isSegmentVisible(lastN, n)) {
-                    drawSegment(lastN, n, severity.getColor());
+                window[index++] = n;
+                if (index==4)
+                {
+                    drawSegment(window[1], window[2], window[0] == null, !isSegmentVisible(window[2], window[3]), severity.getColor());
+                    window[0] = window[1];
+                    window[1] = window[2];
+                    window[2] = window[3];
+                    index = 3;
                 }
-                lastN = n;
-            }
+            }
+            if (window[1] != null && window[2] != null) drawSegment(window[1], window[2], window[0] == null, true, severity.getColor());
         }
     }
Index: /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/Severity.java
===================================================================
--- /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/Severity.java	(revision 27399)
+++ /applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/Severity.java	(revision 27400)
@@ -11,4 +11,8 @@
 /** The error severity */
 public enum Severity {
+
+    /** clean override */ 
+    CLEAN(tr("overridden with odbl=clean"), "clean",           
+        Main.pref.getColor(marktr("license check info"), Color.GREEN)),
 
     /** Error messages */
