Index: applications/editors/josm/plugins/geochat/src/geochat/ChatServerConnection.java
===================================================================
--- applications/editors/josm/plugins/geochat/src/geochat/ChatServerConnection.java	(revision 29591)
+++ applications/editors/josm/plugins/geochat/src/geochat/ChatServerConnection.java	(revision 29592)
@@ -22,4 +22,7 @@
  */
 class ChatServerConnection {
+    public static final String TOKEN_PREFIX = "=";
+    private static final String TOKEN_PATTERN = "^[a-zA-Z0-9]{10}$";
+    
     private int userId;
     private String userName;
@@ -120,8 +123,15 @@
             return;
         }
+        String token = userName.startsWith(TOKEN_PREFIX) ? userName.substring(TOKEN_PREFIX.length()) : null;
+        if( token != null && !token.matches(TOKEN_PATTERN) ) {
+            fireLoginFailed("Incorrect token format");
+            return;
+        }
+
         try {
+            String nameAttr = token != null ? "&token=" + token : "&name=" + URLEncoder.encode(userName, "UTF-8");
             String query = "register&lat=" + pos.latToString(CoordinateFormat.DECIMAL_DEGREES)
                     + "&lon=" + pos.lonToString(CoordinateFormat.DECIMAL_DEGREES)
-                    + "&name=" + URLEncoder.encode(userName, "UTF8");
+                    + nameAttr;
             JsonQueryUtil.queryAsync(query, new JsonQueryCallback() {
                 public void processJson( JSONObject json ) {
@@ -133,5 +143,6 @@
                         fireLoginFailed(tr("The server did not return user ID"));
                     else {
-                        login(json.getInt("uid"), userName);
+                        String name = json.has("name") ? json.getString("name") : userName;
+                        login(json.getInt("uid"), name);
                     }
                 }
