Index: applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/BasicLicenseCheck.java
===================================================================
--- applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/BasicLicenseCheck.java	(revision 27161)
+++ applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/BasicLicenseCheck.java	(revision 27206)
@@ -5,4 +5,6 @@
 
 import java.util.Arrays;
+import java.util.Map.Entry;
+import java.util.HashMap;
 import java.util.Collections;
 import java.util.List;
@@ -25,47 +27,38 @@
     @Override public void visit(Node n) 
     {
-        List<User> users = plugin.getUsers(n);
+        HashMap<User,Severity> users = plugin.getUsers(n);
         doCheck(n, users);
     }
     @Override public void visit(Way w) 
     {
-        List<User> users = plugin.getUsers(w);
+        HashMap<User, Severity> users = plugin.getUsers(w);
         doCheck(w, users);
     }
     @Override public void visit(Relation r) 
     {
-        List<User> users = plugin.getUsers(r);
+        HashMap<User, Severity> users = plugin.getUsers(r);
         doCheck(r, users);
     }
 
-    private void doCheck(OsmPrimitive n, List<User> users)
+    private void doCheck(OsmPrimitive n, HashMap<User, Severity> users)
     {
         Severity sev = null;
         if ((users != null) && (n.getUser() != null))
         {
-            int u0 = users.get(0).getRelicensingStatus();
+            for (Entry<User, Severity> e : users.entrySet())
+            {
+                // larger sev value = less important
+                if ((sev == null) || (sev.compareTo(e.getValue()) > 0)) 
+                {
+                    sev = e.getValue();
+                }
+            }
             String msg = null;
-            if (u0 == User.STATUS_NOT_AGREED || u0 == User.STATUS_ANONYMOUS)
-            {
-                sev = Severity.DATA_LOSS;
-                msg = (u0 == User.STATUS_NOT_AGREED) ? tr("Creator has rejected CT") : tr("Creator unknown");
-            }
-            else if (u0 == User.STATUS_UNDECIDED)
-            {
-                sev = Severity.POSSIBLE_DATA_LOSS;
-                msg = tr("Creator has not (yet) accepted CT");
-            }
-            else
-            {
-                for (int i=1; i<users.size(); i++)
-                {
-                    int ux = users.get(i).getRelicensingStatus();
-                    if (ux == User.STATUS_NOT_AGREED || ux == User.STATUS_ANONYMOUS || ux == User.STATUS_UNDECIDED)
-                    {
-                        sev = Severity.DATA_REDUCTION;
-                        msg = tr("Object modified by user(s) who have rejected, or not agreed to, CT");
-                        break;
-                    }
-                }
+            if (sev == Severity.FIRST) {
+                msg = tr("Creator has not agreed to CT");
+            } else if (sev == Severity.NORMAL) {
+                msg = tr("Object modified by user(s) who have rejected, or not agreed to, CT");
+            } else {
+                msg = tr("minor issue");
             }
 
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 27161)
+++ applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/LicenseChangePlugin.java	(revision 27206)
@@ -74,11 +74,11 @@
 
     /** Database of users who have edited something. */
-    private final Map<Long, List<User>> nodeUsers = new HashMap<Long, List<User>>();
-    private final Map<Long, List<User>> wayUsers = new HashMap<Long, List<User>>();
-    private final Map<Long, List<User>> relationUsers = new HashMap<Long, List<User>>();
-
-    public List<User> getUsers(Node n) { return nodeUsers.get(n.getId()); }
-    public List<User> getUsers(Way n) { return wayUsers.get(n.getId()); }
-    public List<User> getUsers(Relation n) { return relationUsers.get(n.getId()); }
+    private final HashMap<Long, HashMap<User, Severity>> nodeUsers = new HashMap<Long, HashMap<User, Severity>>();
+    private final HashMap<Long, HashMap<User, Severity>> wayUsers = new HashMap<Long, HashMap<User, Severity>>();
+    private final HashMap<Long, HashMap<User, Severity>> relationUsers = new HashMap<Long, HashMap<User, Severity>>();
+
+    public HashMap<User, Severity> getUsers(Node n) { return nodeUsers.get(n.getId()); }
+    public HashMap<User, Severity> getUsers(Way n) { return wayUsers.get(n.getId()); }
+    public HashMap<User, Severity> getUsers(Relation n) { return relationUsers.get(n.getId()); }
 
     /**
@@ -150,5 +150,5 @@
     private class QhsParser extends DefaultHandler 
     {
-        List<User> theList = null;
+        HashMap<User, Severity> theMap = null;
 
         @Override
@@ -160,7 +160,7 @@
             if ("node".equals(qName) || "way".equals(qName) || "relation".equals(qName)) 
             {
-                 Map<Long, List<User>> theMap = ("node".equals(qName)) ? nodeUsers : ("way".equals(qName)) ? wayUsers : relationUsers;
+                 HashMap<Long, HashMap<User, Severity>> userMap = ("node".equals(qName)) ? nodeUsers : ("way".equals(qName)) ? wayUsers : relationUsers;
                  // we always overwrite a list that might already exist
-                 theMap.put(Long.decode(atts.getValue("id")), theList = new ArrayList<User>());
+                 userMap.put(Long.decode(atts.getValue("id")), theMap = new HashMap<User, Severity>());
             }
             else if ("user".equals(qName))
@@ -169,15 +169,19 @@
                 String i = atts.getValue("id");
                 String d = atts.getValue("decision");
+                String s = atts.getValue("severity");
+
+                if (!"undecided".equals(d) && !"no".equals(d)) return;
+
+                if ("normal".equals(s) && "first".equals(v)) s = "first";
                 User u = User.createOsmUser(Long.parseLong(i), null);
-                if ("first".equals(v)) theList.add(0, u); else theList.add(u);
                 u.setRelicensingStatus(
-                    "undecided".equals(d) ? User.STATUS_UNDECIDED :
-                    "auto".equals(d) ? User.STATUS_AUTO_AGREED :
-                    "yes".equals(d) ? User.STATUS_AGREED :
-                    "override".equals(d) ? User.STATUS_AGREED :
-                    "pd".equals(d) ? User.STATUS_AGREED :
-                    "no".equals(d) ? User.STATUS_NOT_AGREED :
-                    "anonymous".equals(d) ? User.STATUS_ANONYMOUS :
-                    User.STATUS_UNKNOWN);
+                        "undecided".equals(d) ? User.STATUS_UNDECIDED :
+                        "no".equals(d) ? User.STATUS_NOT_AGREED :
+                        User.STATUS_UNKNOWN);
+                theMap.put(u,
+                        "first".equals(s) ? Severity.FIRST :
+                        "normal".equals(s) ? Severity.NORMAL :
+                        "harmless".equals(s) ? Severity.HARMLESS :
+                        Severity.NONE);
             }
         }
@@ -218,5 +222,5 @@
 
         try {
-            URL qhs = new URL("http://wtfe.gryph.de/api/0.6/userlist");
+            URL qhs = new URL("http://wtfe.gryph.de/api/0.6/problems");
             HttpURLConnection activeConnection = (HttpURLConnection)qhs.openConnection();
             activeConnection.setRequestMethod("POST");
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 27161)
+++ applications/editors/josm/plugins/licensechange/src/org/openstreetmap/josm/plugins/licensechange/Severity.java	(revision 27206)
@@ -13,14 +13,18 @@
 
     /** Error messages */
-    DATA_LOSS(tr("Data loss"), "error",                     
+    FIRST(tr("data loss"), "error",                     
         Main.pref.getColor(marktr("license check error"), Color.RED)),
 
     /** Warning messages */
-    POSSIBLE_DATA_LOSS(tr("Possible data loss"), "warning", 
+    NORMAL(tr("possible data loss"), "warning", 
         Main.pref.getColor(marktr("license check warning"), Color.ORANGE)),
 
     /** Other messages */
-    DATA_REDUCTION(tr("Data reduction"), "other",           
-        Main.pref.getColor(marktr("license check notice"), Color.YELLOW));
+    HARMLESS(tr("harmless data loss"), "other",           
+        Main.pref.getColor(marktr("license check notice"), Color.YELLOW)),
+
+    /** Other messages */
+    NONE(tr("no data loss"), "other",           
+        Main.pref.getColor(marktr("license check info"), Color.GRAY));
 
     /** Description of the severity code */
