Index: trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 6742)
+++ trunk/src/org/openstreetmap/josm/actions/AbstractInfoAction.java	(revision 6743)
@@ -6,5 +6,4 @@
 
 import java.awt.event.ActionEvent;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -73,16 +72,4 @@
     }
 
-    protected void launchBrowser(URL url) {
-        OpenBrowser.displayUrl(
-                url.toString()
-        );
-    }
-
-    protected void launchBrowser(String url) {
-        OpenBrowser.displayUrl(
-                url
-        );
-    }
-
     public static boolean confirmLaunchMultiple(int numBrowsers) {
         String msg  = /* for correct i18n of plural forms - see #9110 */ trn(
@@ -149,5 +136,5 @@
             return;
         for(int i = 0; i < max; i++) {
-            launchBrowser(createInfoUrl(primitivesToShow.get(i)));
+            OpenBrowser.displayUrl(createInfoUrl(primitivesToShow.get(i)));
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 6742)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/UserListDialog.java	(revision 6743)
@@ -44,4 +44,5 @@
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -212,5 +213,5 @@
                     break;
                 }
-                launchBrowser(url);
+                OpenBrowser.displayUrl(url);
                 num--;
             }
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java	(revision 6742)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java	(revision 6743)
@@ -89,6 +89,4 @@
 
         HelpUtil.setHelpContext(getRootPane(), ht("/Dialog/HistoryBrowser"));
-
-        setSize(800, 500);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 6742)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialogManager.java	(revision 6743)
@@ -16,5 +16,4 @@
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.PrimitiveId;
 import org.openstreetmap.josm.data.osm.history.History;
@@ -73,10 +72,12 @@
     }
 
+    final String WINDOW_GEOMETRY_PREF = getClass().getName() + ".geometry";
+
     public void placeOnScreen(HistoryBrowserDialog dialog) {
-        WindowGeometry geometry = WindowGeometry.centerOnScreen(new Dimension(800,500));
+        WindowGeometry geometry = new WindowGeometry(WINDOW_GEOMETRY_PREF, WindowGeometry.centerOnScreen(new Dimension(850, 500)));
         geometry.applySafe(dialog);
         Point p = dialog.getLocation();
         while(hasDialogWithCloseUpperLeftCorner(p)) {
-            p.x +=20;
+            p.x += 20;
             p.y += 20;
         }
@@ -94,4 +95,7 @@
         if (id > 0) {
             dialogs.remove(id);
+            if (dialogs.isEmpty()) {
+                new WindowGeometry(dialog).remember(WINDOW_GEOMETRY_PREF);
+            }
         }
         dialog.setVisible(false);
Index: trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 6742)
+++ trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java	(revision 6743)
@@ -45,5 +45,4 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -439,5 +438,5 @@
                     User user = p.getUser();
                     if (user != null)
-                        return "<html>" + XmlWriter.encode(user.getName(), true) + " <font color=gray>(" + user.getId() + ")</font></html>";
+                        return user.getName();
                 }
                 return null;
Index: trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java	(revision 6742)
+++ trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java	(revision 6743)
@@ -31,8 +31,11 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.AbstractInfoAction;
+import org.openstreetmap.josm.data.osm.User;
 import org.openstreetmap.josm.data.osm.history.History;
 import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
+import org.openstreetmap.josm.io.XmlWriter;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.OpenBrowser;
 
 /**
@@ -161,5 +164,5 @@
                 return;
             String url = createInfoUrl(primitive);
-            launchBrowser(url);
+            OpenBrowser.displayUrl(url);
         }
 
@@ -170,11 +173,46 @@
     }
 
+    static class UserInfoAction extends AbstractInfoAction {
+        private HistoryOsmPrimitive primitive;
+
+        public UserInfoAction() {
+            super(true);
+            putValue(NAME, tr("User info"));
+            putValue(SHORT_DESCRIPTION, tr("Launch browser with information about the user"));
+            putValue(SMALL_ICON, ImageProvider.get("about"));
+        }
+
+        @Override
+        protected String createInfoUrl(Object infoObject) {
+            HistoryOsmPrimitive primitive = (HistoryOsmPrimitive) infoObject;
+            return primitive.getUser() == null ? null : getBaseBrowseUrl() + "/user/" + primitive.getUser().getName();
+        }
+
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (!isEnabled())
+                return;
+            String url = createInfoUrl(primitive);
+            OpenBrowser.displayUrl(url);
+        }
+
+        public void prepare(HistoryOsmPrimitive primitive) {
+            final User user = primitive.getUser();
+            putValue(NAME, "<html>" + tr("Show user {0}", user == null ? "?" :
+                    XmlWriter.encode(user.getName(), true) + " <font color=gray>(" + user.getId() + ")</font>") + "</html>");
+            this.primitive = primitive;
+        }
+    }
+
     static class VersionTablePopupMenu extends JPopupMenu {
 
         private ChangesetInfoAction changesetInfoAction;
+        private UserInfoAction userInfoAction;
 
         protected void build() {
             changesetInfoAction = new ChangesetInfoAction();
             add(changesetInfoAction);
+            userInfoAction = new UserInfoAction();
+            add(userInfoAction);
         }
         public VersionTablePopupMenu() {
@@ -185,4 +223,5 @@
         public void prepare(HistoryOsmPrimitive primitive) {
             changesetInfoAction.prepare(primitive);
+            userInfoAction.prepare(primitive);
             invalidate();
         }
