Index: /trunk/src/org/openstreetmap/josm/data/osm/User.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/User.java	(revision 3775)
+++ /trunk/src/org/openstreetmap/josm/data/osm/User.java	(revision 3776)
@@ -7,4 +7,7 @@
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
+import org.openstreetmap.josm.io.MirroredInputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
 
 /**
@@ -25,4 +28,5 @@
      */
     private static HashMap<Long,User> userMap = new HashMap<Long,User>();
+    private static HashSet<Long> relicensingUsers = null;
 
     private static long getNextLocalUid() {
@@ -102,8 +106,41 @@
     }
 
+    public static void loadRelicensingInformation() {
+        relicensingUsers = new HashSet<Long>();
+        try {
+        MirroredInputStream stream = new MirroredInputStream("http://planet.openstreetmap.org/users_agreed/users_agreed.txt");
+        InputStreamReader r;
+        r = new InputStreamReader(stream);
+        BufferedReader reader = new BufferedReader(r);
+        String line;
+        while ((line = reader.readLine()) != null) {
+            if (line.startsWith("#")) continue;
+            try {
+                relicensingUsers.add(new Long(Long.parseLong(line.trim())));
+            } catch (java.lang.NumberFormatException ex) {
+            }
+        }
+        stream.close();
+        } catch (java.io.IOException ex) {
+        }
+    }
+
     /** the user name */
     private final HashSet<String> names = new HashSet<String>();
     /** the user id */
     private final long uid;
+
+    public static final int STATUS_UNKNOWN = 0;
+    public static final int STATUS_AGREED = 1;
+    public static final int STATUS_NOT_AGREED = 2;
+    public static final int STATUS_AUTO_AGREED = 3;
+
+    /** 
+    */
+    public int getRelicensingStatus() {
+        if (uid >= 286582) return STATUS_AUTO_AGREED;
+        if (relicensingUsers == null) return STATUS_UNKNOWN;
+        return (relicensingUsers.contains(new Long(uid)) ? STATUS_AGREED : STATUS_NOT_AGREED);
+    }
 
     /**
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 3775)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 3776)
@@ -5,4 +5,5 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.Component;
 import java.awt.BorderLayout;
 import java.awt.event.ActionEvent;
@@ -29,5 +30,8 @@
 import javax.swing.JScrollPane;
 import javax.swing.JTable;
+import javax.swing.JLabel;
 import javax.swing.ListSelectionModel;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.TableColumnModel;
 import javax.swing.event.ListSelectionEvent;
 import javax.swing.event.ListSelectionListener;
@@ -46,4 +50,6 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.ImageProvider;
+import javax.swing.ImageIcon;
 
 /**
@@ -61,4 +67,5 @@
     private SelectUsersPrimitivesAction selectionUsersPrimitivesAction;
     private ShowUserInfoAction showUserInfoAction;
+    private LoadRelicensingInformationAction loadRelicensingInformationAction;
 
     public UserListDialog() {
@@ -95,4 +102,8 @@
         userTable.getSelectionModel().addListSelectionListener(showUserInfoAction);
         pnl.add(new SideButton(showUserInfoAction));
+
+        // -- load relicensing info action
+        loadRelicensingInformationAction = new LoadRelicensingInformationAction();
+        pnl.add(new SideButton(loadRelicensingInformationAction));
         return pnl;
     }
@@ -104,4 +115,14 @@
         userTable = new JTable(model);
         userTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+        TableColumnModel columnModel = userTable.getColumnModel();
+        columnModel.getColumn(3).setPreferredWidth(20);
+        columnModel.getColumn(3).setCellRenderer(new DefaultTableCellRenderer() {
+            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+                final JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+                label.setIcon((ImageIcon)value);
+                label.setText("");
+                return label;
+            };
+        });
         pnl.add(new JScrollPane(userTable), BorderLayout.CENTER);
 
@@ -182,5 +203,5 @@
     }
 
-    /**
+    /*
      * Action for launching the info page of a user
      */
@@ -244,4 +265,26 @@
     }
 
+    /*
+     */
+    class LoadRelicensingInformationAction extends AbstractAction {
+
+        public LoadRelicensingInformationAction() {
+            super();
+            putValue(NAME, tr("Load CT"));
+            putValue(SHORT_DESCRIPTION, tr("Loads information about relicensing status from the server. Users having agreed to the new contributor terms will show a green check mark."));
+            putValue(SMALL_ICON, ImageProvider.get("about"));
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            User.loadRelicensingInformation();
+            Layer layer = Main.main.getActiveLayer();
+            if (layer instanceof OsmDataLayer) {
+               refresh(((OsmDataLayer)layer).data.getSelected());
+            }
+            setEnabled(false);
+        }
+    }
+
     class DoubleClickAdapter extends MouseAdapter {
         @Override
@@ -280,4 +323,10 @@
             return user.getName();
         }
+
+        public int getRelicensingStatus() {
+            if (user == null)
+                return User.STATUS_UNKNOWN;
+            return user.getRelicensingStatus();
+        }
     }
 
@@ -288,8 +337,10 @@
     static class UserTableModel extends DefaultTableModel {
         private ArrayList<UserInfo> data;
+        private ImageIcon greenCheckmark;
 
         public UserTableModel() {
-            setColumnIdentifiers(new String[]{tr("Author"),tr("# Objects"),"%"});
+            setColumnIdentifiers(new String[]{tr("Author"),tr("# Objects"),"%", tr("CT")});
             data = new ArrayList<UserInfo>();
+            greenCheckmark = ImageProvider.get("misc", "green_check.png");
         }
 
@@ -332,4 +383,8 @@
             case 1: /* count */ return info.count;
             case 2: /* percent */ return NumberFormat.getPercentInstance().format(info.percent);
+            case 3: /* relicensing status */
+                if (info.getRelicensingStatus() == User.STATUS_AGREED) return greenCheckmark;
+                if (info.getRelicensingStatus() == User.STATUS_AUTO_AGREED) return greenCheckmark;
+                return null;
             }
             return null;
